簡體   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