2009-11-12 158 views
3

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

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

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

回答

1

这一切似乎都有点混乱。可以有任何数量的人通过远程桌面等登录。如果您作为服务希望看到他们的注册表,您绝对不会通过HKCU到达那里。如果你想要这样的东西,你应该使用autorun exe而不是服务。任何类似检查会话和向其中注入东西以访问会话中加载的注册表配置单元的方式都是过度的,并且不可能以任何方式清理干净。

+0

没想到的是,用户的SID的过程 - 删除我的回答 – ChrisF 2009-11-12 12:42:39

+0

认为我现在正沿着应用程序路线走,希望通过登录脚本以启动时的用户身份运行 – manemawanna 2009-11-12 14:32:29

+0

只要您不需要以管理员身份运行应用程序 - 可能会使UAC变得麻烦Vista中/ 2K8/2K8R2。祝你好运。 – 2009-11-12 14:51:09

2

当前用户”的假设是一个桌面Windows概念,并且使用快速用户切换,即使这不是事实。 Windows服务层在桌面和服务器变体中相当普遍,并不能很好地解决这个问题。它位于交互式会话层下面。其中一种方式就是能够运行服务,即使没有用户登录。

0

您可以找到以类似explorer.exe的每一个用户运行,然后获得在运行过程中(你可以使用WMI像功能here