使用服务 ID 等的独立 WPF 应用程序

Stand alone WPF application using a service ID or like

有人要求我在 Windows 7 机器上为 运行 编写一个 C# 应用程序,以显示一天中的时间、天气等。我可以做到。我正在寻找的是 运行 Windows7 机器上的应用程序指南,无需以用户身份登录。从本质上讲,这台机器只是一个带屏幕的 CPU。没有键盘或鼠标。我已经看到使用服务 ID 在 MS-PixelSense(以前是 MS-Surface)上完成的部署。

如果我需要登录、启动用户策略、启用屏幕保护程序等。我假设如果我使用自动服务 ID,我可以让应用程序覆盖大部分设置,让屏幕保持打开状态,需要分配/锁定到服务 ID 的权限。
任何信息/建议表示赞赏....

首先,一些背景信息:

正在访问网络共享

如果您客户端上的进程 运行ning 想要访问 (CIFS) 共享,它必须在具有访问权限的用户帐户(或 "Service ID")下 运行此份额的权利。有一种方法(如果客户端是 Active Directory 的成员)必须在 ACL(Share / NTFS)中输入附加 $ 的机器名称(实际上是 AD 中的机器帐户名称),但这是不是很 "usual" 的方式。

另见 https://serverfault.com/questions/41130/network-service-account-accessing-a-folder-share

Windows 服务 运行 在用户帐户(又名技术帐户或服务 ID)下使用

用户帐户下的服务 运行ning 无法访问 GUI。有一些技巧,几年前我写了一个工具,允许服务启动另一个 GUI 程序,其中 GUI 显示在 Ctrl-Alt-Del 对话框上方。但这在 Windows 7 下不再有效。 但即使是 运行s 在本地系统下的服务也无法在登录屏幕上显示 GUI。 您将不得不编写一个凭据提供程序。

Windows service showing a GUI when no user is logged in

又一篇技术性很强的文章。它说可以在安全桌面/登录屏幕上显示 GUI。我自己还没有测试过:

http://calebdelnay.com/blog/2012/01/displaying-a-program-on-the-windows-secure-desktop

自动登录

最广为人知的方法仍然是 "classic" 自动登录。

有关一些解释和链接,请参阅 https://security.stackexchange.com/questions/10170/how-secure-is-windows-auto-logon。 中等安全方法是将密码存储为 LSA 机密(可以使用 P/Invoke 或某些工具在 C# 中完成)。

If I need to signin, user policies kick in, screen savers enable, etc.

是的,但这可以解决,您可能必须为此创建一个具有自己策略的 AD OU。

I'm assuming if I use an automatic Service ID, I can let the application override most of the settings keeping the screen on and needed privileges assigned / locked down to the service ID.

服务ID/技术账号与普通个人用户账号基本相同。 在某些 Active Directory 企业环境中,技术帐户具有无法以交互方式登录和其他限制的限制。但它仍然是 "user account"

登录专家 (http://www.logonexpert.com/)

我测试了这个(试用版)。这是一个很好的小工具,可以完成它的工作。它比 "normal autologon" 更安全,但归根结底,它与普通的经典自动登录没有太大区别。一个好处:它更安全地存储密码,但理论上,一些黑客仍然可以反编译程序并找到解密它的方法。对您来说更重要的是:除了更安全的密码存储之外,它不会给您带来太多好处。您仍然有一个与正常自动登录相同的用户登录。

几点建议

也许您可以在客户端系统上使用本地用户帐户并使用正常的自动登录机制。然后你应该考虑到客户端系统不会轮询网络共享上的新数据,而是另一个服务器程序(作为服务实现,运行ning 在技术域帐户下)将数据推送到网络共享上客户端。

这样做,客户端代码不需要访问网络共享,好处是恶意攻击者也无法访问网络共享。

如果您确实需要从本地用户上下文访问网络共享,您可以登录到服务器,如我在此处的回答中所述:

您必须更改注册表代码部分以访问 CIFS 共享。

但是这样做,您又得到了一个密码,您必须对其进行加密和存储。我不推荐这个。

最后...

Windows 不会让您想做的事变得容易。如果您没有严格遵守 Windows,您可以考虑使用 Raspberry Pi 和 Raspbian(Debian 派生的 Linux)。您可以安装 Chromium 浏览器,它会在服务器上显示网页并自动更新。我们成功地使用了一段时间。