我有一个 Windows 可执行文件,它通过使用一组指定的用户详细信息调用 CreateProcessWithLogonW() 从服务中启动。
这可以正常工作,并且该过程按预期开始。然而,当这个进程试图自己启动其他进程时,目前只使用 CreateProcess() 这些启动然后立即死亡 - 它们是需要桌面访问的可执行文件。
在阅读了微软关于 CreateProcess() 的文章后 - http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx
我认为可以看出为什么会发生这种情况,并且在一定程度上是有道理的。CreateProcess() 知道调用进程正在模拟用户,因此它使用它的父进程,在本例中是本地系统帐户。但是当然,在本地系统帐户中运行的任何东西都没有我们需要的访问权限,因此启动的进程会死掉。
奇怪的是,当我之前使用 LogonUser() 和 CreateProcessAsUser() 在服务中启动初始可执行文件时,它运行良好。但是由于没有正确权限的问题,我不得不将其更改为 CreateProcessWithLogonW()。
有人知道解决这个问题吗?我在网上其他地方看到过关于这个的讨论,但没有任何明确的解决方案。似乎我可能需要我在 CreateProcessWithLogonW() 中登录的用户的令牌,以便以后可以使用它来启动其他进程?但是我无法获得这个令牌,可以以任何方式为当前用户检索它吗?
任何帮助将不胜感激,谢谢:)