繁体   English   中英

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

[英]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都不允许您在挂起状态下创建新进程。

因此,我看不到一种实现所需目标的干净方法。 我建议以下内容:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM