如何将Process.Start()用于其中一个内置用户帐户?

问题描述:

我想知道是否有办法启动一个作为内置服务帐户之一运行的进程?我想开始托管代码的过程。我想使用其中一个内置服务帐户(LocalService,NetworkService,LocalSystem)。如何将Process.Start()用于其中一个内置用户帐户?

我想你可以使用psexec作为中介以LocalSystem(又称为系统)下启动一个进程帐户:

运行Regedit交互的系统帐户,查看SAM和安全密钥的内容:

psexec -i -d -s c:\windows\regedit.exe

但我不能想办法在其他帐户下启动。关于我能想到的唯一间接方式就是让服务已经在适当的帐户下运行,然后连接到它(通过例如远程处理,管道,WCF,任何适合您的方式),并要求它启动新的过程。

当然,在这种情况下,新进程不能与桌面交互,所以如果你需要的话,你仍然会运气不好。

我认为你只能从另一个服务的上下文中做到这一点(或者可能只是作为LocalSystem运行就足够了);在这种情况下,您可以使用LogonUser()来获取令牌。或者,您可以尝试查找在所需帐户下运行的现有服务并复制其令牌(假设您有相应的访问权限)。