【发布时间】:2012-11-05 16:20:48
【问题描述】:
我正在尝试使用类似于this code 的 CreateProcessAsUser() API 从服务启动用户模式进程。我的代码在 99% 的情况下都能正常工作,除了 API 有时会成功,我从 PROCESS_INFORMATION 结构中获取进程句柄,但进程本身并没有出现在我打算在其中运行的交互式用户会话中.
有趣的是,如果我在进程句柄上调用 GetExitCodeProcess(),它会成功并返回代码 0xC0000142。知道为什么吗?
【问题讨论】:
-
失败时,能不能完全启动子进程?您尝试启动的 .exe 是否可能依赖于缺少的 DLL?
-
返回码肯定符合行为,它是 STATUS_DLL_INIT_FAILED。这肯定会阻止该过程开始。它使用的 DLL 之一从其 DllMain() 入口点返回 FALSE。你需要在你的开发机器上重现这个,这样你才能调试它。
-
@HansPassant 和 MichaelSh 感谢您的建议。我需要尝试登录该用户会话并查看是否可以手动启动进程。问题是它不会一直发生......但是,我的问题是为什么 CreateProcessAsUser() 在它显然没有启动任何东西时返回 TRUE?
-
我发现这篇文章可以解释我所看到的“桌面堆耗尽”。对我来说这听起来很可能:blogs.technet.com/b/askperf/archive/2007/07/24/…