![](/img/trans.png)
[英]How to run a process with ShellExecuteEx as as a child that closes after parent exit?
[英]Get Thread exit code after running ShellExecuteEx
在异步模式下运行ShellExecuteEx()之后,如何检索主线程的退出代码?
可以简单地按以下方式检索流程退出代码:
SHELLEXECUTEINFO execInfo;
execInfo.cbSize = sizeof(SHELLEXECUTEINFO);
execInfo.fMask = SEE_MASK_NOASYNC;
ShellExecuteEx(&execInfo);
/* Get process exit code. */
DWORD processExitCode;
GetExitCodeProcess(execInfo.hProcess, &processExitCode);
但是如何获取主线程的退出代码? 什么应该传递给GetExitCodeThread()?
主线程的退出代码等于进程IMHO的退出代码。
为了获取主进程线程的退出代码,必须获取其HANDLE
。 不幸的是, ShellExecuteEx
不会返回此值(它仅返回新创建的进程的HANDLE
)。
还可以枚举特定进程中的所有线程并打开它们的句柄( OpenThread
)。 因此,您可以创建处于“挂起”状态的进程,获取其唯一线程(尚未开始执行)的句柄,然后继续。
Execute, ShellExecuteEx
都不允许您在挂起状态下创建新进程。
因此,我看不到一种实现所需目标的干净方法。 我建议以下内容:
CreateProcess
。 它具有所需的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.