Получить код завершения потока после запуска ShellExecuteEx - PullRequest
0 голосов
/ 05 ноября 2010

Как можно получить код выхода основного потока после запуска 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 ]

1 голос
/ 05 ноября 2010

Код выхода основного потока равен коду выхода процесса ИМХО.

0 голосов
/ 07 ноября 2010

Чтобы получить код выхода основного потока процесса - нужно получить его HANDLE. К сожалению, ShellExecuteEx не возвращает вам это (он возвращает только HANDLE только что созданного процесса).

Можно также перечислить все потоки в определенном процессе и открыть их дескрипторы (OpenThread). Таким образом, вы можете создать процесс в «приостановленном» состоянии, получить дескриптор его единственного потока (который еще не начал выполнение) и затем продолжить.

Увы, ShellExecuteEx также не позволяет создавать новый процесс в приостановленном состоянии.

Так что я не вижу чистого способа достичь того, чего вы хотите. Я бы предложил следующее:

  1. Зачем вам вообще нужен код выхода основного потока? Возможно, кода выхода процесса будет достаточно?
  2. Рассмотрите возможность использования CreateProcess. Имеет необходимый функционал.
  3. Могут помочь некоторые грязные уловки, такие как внедрение DLL во вновь созданный процесс (перехват) и т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...