代码之家  ›  专栏  ›  技术社区  ›  Robert Fleming

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

  •  0
  • Robert Fleming  · 技术社区  · 10 年前

    我被要求编写一个C#应用程序,在Windows 7计算机上运行,以显示一天中的时间、天气等。我可以做到这一点。我正在寻找的是在Windows 7机器上运行该应用程序而不以用户身份登录的指导。本质上,机器只是一个带屏幕的CPU。没有键盘或鼠标。我见过使用服务ID在MS PixelSense(以前是MS Surface)上完成的部署。

    如果我需要登录,用户策略启动,屏幕保护程序启用等。我假设如果我使用自动服务ID,我可以让应用程序覆盖大多数设置,以保持屏幕打开,并为服务ID分配/锁定所需的权限。
    欢迎提供任何信息/建议。。。。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Community CDub    7 年前

    首先,一些背景信息:

    访问网络共享

    如果客户端上运行的进程想要访问(CIFS)共享,则必须在具有此共享访问权限的用户帐户(或“服务ID”)下运行。有一种方法(如果客户端是Active Directory的成员),必须在ACL(Share/NTFS)中输入附加了$的计算机名(实际上是AD中的计算机帐户名),但这不是一种非常“常见”的方法。

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

    在用户帐户(也称为技术帐户或服务ID)下运行的Windows服务

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

    看见

    Windows service showing a GUI when no user is logged in

    https://stackoverflow.com/a/3074040/4547223

    另一篇非常深入的技术文章。它表示可以在安全桌面/登录屏幕上显示GUI。我自己还没有测试过:

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

    自动登陆

    最广为人知的方式仍然是“经典”的自动登录。

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

    如果我需要登录,用户策略生效,屏幕保护程序启用等。

    是的,但这是可以处理的,您可能必须创建自己的AD OU,并为此创建自己的策略。

    我假设如果我使用自动服务ID,我可以让应用程序覆盖大多数设置,以保持屏幕打开,并为服务ID分配/锁定所需的权限。

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

    Logonexpert公司( http://www.logonexpert.com/ )

    我测试了这个(试用版)。这是一个很好的小工具。它比“正常自动登录”更安全,但最终,它与正常的经典自动登录没有太大区别。一个好处是:它可以更频繁地存储密码,但理论上,一些黑客可能仍然会对程序进行反编译,并找到解密密码的方法。对你来说更重要的是:除了更安全的密码存储,它不会给你带来太多好处。您仍然拥有与正常自动登录相同的用户登录。

    几点建议

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

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

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

    https://stackoverflow.com/a/28749093/4547223

    您必须更改具有CIFS共享访问权限的注册表代码部分。

    但是这样做,你又有了一个密码,你必须对其进行加密和存储。我不建议这样做。

    最后

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