Winapi 当使用CreateProcess函数启动时,cmd.exe在某些情况下不会终止

Winapi 当使用CreateProcess函数启动时,cmd.exe在某些情况下不会终止,winapi,batch-file,cmd,Winapi,Batch File,Cmd,我通过一个带有CreateProcess函数的C程序执行批处理命令。我通过检查进程退出代码是否等于除仍然处于活动状态之外的任何值来检查进程是否已使用GetExitCodeProcess函数终止。这适用于“cmd/c echo Hello World”等命令,但对于“cmd/c dir c:\windows”或“cmd/c dir c:\windows&exit”等命令,cmd.exe永远不会终止。通过命令提示符启动的任一命令将按预期终止。有人知道为什么它在通过CreateProcess启动时从不

我通过一个带有CreateProcess函数的C程序执行批处理命令。我通过检查进程退出代码是否等于除仍然处于活动状态之外的任何值来检查进程是否已使用GetExitCodeProcess函数终止。这适用于“cmd/c echo Hello World”等命令,但对于“cmd/c dir c:\windows”或“cmd/c dir c:\windows&exit”等命令,cmd.exe永远不会终止。通过命令提示符启动的任一命令将按预期终止。有人知道为什么它在通过CreateProcess启动时从不终止吗?非常感谢。

显然,我必须开始读取循环中的stdout/stderr管道,检查进程是否仍在运行,以及在进程终止后读取它。而不是在进程终止后读取它。非常感谢Wimmel发布了答案。

您是否摆脱了反斜杠`\`它从SQL数据库中提取命令,并且数据库中的命令是有效的。这不是逃避问题。经过更多的测试,似乎只有当输出超过1页时才有问题。“cmd/c dir c:\”和“cmd/c dir c:\test”可以正常工作,但“cmd/c dir c:\windows”不能正常工作。我想知道为什么所有的仇恨和反对票。我错了,这是由于直接的内容的数量,但我不知道确切的数量。c:\test中有30多个目录,它工作正常,有120多个目录,它从未退出过。阿加尼在帖子中回答了你的问题。它使用60而不使用61的原因是输出的大小。有了60,它仍然适合缓冲区,但61太大了。当您
键入一个文本文件时,您将看到相同的问题。一个小的文本文件可以工作,而一个大的文本文件会导致你的程序挂起。非常感谢你!大约半个小时前,我碰巧自己想出了这个办法,但如果不是这样,我仍然会在没有你帮助的情况下把头撞在墙上。