运行ShellExecuteEx后获取线程退出代码

时间:2010-11-05 13:59:43

标签: c++ c windows

在异步模式下运行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()?

2 个答案:

答案 0 :(得分:1)

主线程的退出代码等于进程IMHO的退出代码。

答案 1 :(得分:0)

为了获得主进程线程的退出代码 - 必须获取其HANDLE。不幸的是ShellExecuteEx没有返回给你(它只返回新创建的进程的HANDLE)。

还可以枚举特定进程中的所有线程并打开其句柄(OpenThread)。因此,您可以创建一个处于“挂起”状态的进程,获取其唯一线程的句柄(尚未开始执行),然后继续。

唉,ShellExecuteEx既不允许您在暂停状态下创建新进程。

所以我没有看到一种干净的方式来实现你想要的。我建议如下:

  1. 为什么你还想要主线程的退出代码呢?也许这个过程的退出代码就足够了?
  2. 考虑使用CreateProcess。它具有所需的功能。
  3. 一些肮脏的技巧可能有所帮助,比如将DLL注入新创建的进程(挂钩)等。