CreateProcess 返回非 0 但 GetExitCodeProcess() 返回 128

Posted

技术标签:

【中文标题】CreateProcess 返回非 0 但 GetExitCodeProcess() 返回 128【英文标题】:CreateProcess returns non 0 but GetExitCodeProcess() returns 128 【发布时间】:2011-09-08 06:54:46 【问题描述】:

我正在创建一个应用程序,它将使用 CreateProcess() 启动另一个进程。在父进程中,我将使用 GetExitCodeProcess() 来检查进程是否处于活动状态。

此处 CreateProcess() 成功(返回非负值)但 GetExitCodeProcess() 返回 128(没有子进程等待)。我没有看到任何启动子进程的痕迹(通常是一些调试)。它间歇性地发生。

知道子进程到底发生了什么吗?我们从哪里获得更多信息(在系统/应用程序事件日志中?)。

请指导我。

谢谢, 娜迦

【问题讨论】:

GetExitCodeProcess 的文档倾向于表明除 259 之外的任何值都将是特定于程序的。 (假设GetExitCodeProcess 成功) 错误检查代码很少被测试。或者在您不让任何人看到时进行审核。 CreateProcess 在失败时返回零,而不是负数。 【参考方案1】:

感谢您的 cmets。

我发现以下 MSDN 文章给出了相同的症状和解决问题的方法。


Cmd.exe、Perl.exe 或其他控制台模式应用程序在由使用 CreateProcess() 或 CreateProcessAsUser() API 的服务启动时可能无法正确初始化并提前终止。调用进程无法知道启动的控制台模式应用程序已提前终止。

在某些情况下,对失败的进程调用 GetExitCode() 会指示以下退出代码: 128L ERROR_WAIT_NO_CHILDREN - 没有要等待的子进程。


http://support.microsoft.com/kb/156484 http://support.microsoft.com/kb/142676/EN-US

http://support.microsoft.com/kb/175687/EN-US

谢谢, 娜迦

【讨论】:

这些文章适用于 Windows NT 4,它们不太可能与您的问题相关。

以上是关于CreateProcess 返回非 0 但 GetExitCodeProcess() 返回 128的主要内容,如果未能解决你的问题,请参考以下文章

CreateProcess函数诡异的表现

CreateProcess 的快速替代方案

CreateProcess 和奇怪的 nslookup 错误

如何获得CreateProcess启动的进程返回的结果

调用 CreateProcess() 并获取字符串的返回值

CreateProcess 命令行参数