【问题标题】:Installing a Windows Service as a user以用户身份安装 Windows 服务
【发布时间】:2010-12-15 20:29:31
【问题描述】:

我目前正在创建一个 Windows 服务应用程序,该应用程序将监视对 HKEY_USERS 注册表中某些键的更改。我这样做的方法是收集当前用户的 SID。我遇到的问题是,由于服务当前作为本地系统运行,它返回了管理员 SID。

我需要系统做的是收集并返回当前登录用户的 SID(这里我不是指本地服务、本地系统或网络服务,而是通过 GINA 登录到 windows 的人),所以我需要该服务以该用户身份运行。这也将允许服务写回用户的网络驱动器,这是该程序的意图。

我遇到的问题是,当我尝试使用 installutil.exe 安装用户服务时,它要求输入用户名和密码,现在我尝试了自己的凭据(我有一个管理员和非管理员帐户),但它没有任何它加上我希望用户根据登录的人进行更改而不是修复。有没有办法做到这一点?

【问题讨论】:

    标签: c# windows-services service registry


    【解决方案1】:

    当前用户”假设是一个桌面 Windows 概念,即使是快速用户切换也不再适用。 Windows 服务层在桌面和服务器变体中相当常见,并且不能很好地处理这个问题。它位于交互式会话层之下。这体现在其中一种方式是即使有零个用户登录也能运行服务。

    【讨论】:

      【解决方案2】:

      这一切似乎有点混乱。可以有任意数量的人通过远程桌面等登录。如果您作为服务想要查看他们的注册表,那么您肯定不会通过 HKCU 到达那里。如果你想要这样的东西,你应该使用自动运行的 exe 而不是服务。像检查会话并将内容注入其中以访问会话中加载的注册表配置单元之类的任何事情都太过分了,而且不太可能以任何方式清洁。

      【讨论】:

      • 没想到 - 删除我的答案
      • 认为我现在正在走应用程序路线,希望通过登录脚本在启动时以用户身份运行
      • 只要您不需要以管理员身份运行应用程序 - 这可能会使 Vista/2K8/2K8R2 中的 UAC 变得混乱。祝你好运。
      【解决方案3】:

      您可以像 explorer.exe 一样找到一个与每个用户一起运行的进程,然后获取运行该进程的用户的 SID(您可以在函数 here 中使用 WMI)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-18
        相关资源
        最近更新 更多