2010-11-05 3 views
0

Comment le code de sortie du thread principal peut-il être récupéré après avoir exécuté ShellExecuteEx() en mode asynchrone?Récupère le code de sortie Thread après avoir exécuté ShellExecuteEx

Le code de sortie du processus peut simplement être récupéré comme suit:

SHELLEXECUTEINFO execInfo; 
execInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
execInfo.fMask = SEE_MASK_NOASYNC; 

ShellExecuteEx(&execInfo); 

/* Get process exit code. */ 
DWORD processExitCode; 
GetExitCodeProcess(execInfo.hProcess, &processExitCode); 

Mais comment le code de sortie du thread principal peut être récupéré? Que devrait-on passer à GetExitCodeThread()?

Répondre

0

Afin d'obtenir le code de sortie du thread de processus primaire - il faut obtenir son HANDLE. Malheureusement ShellExecuteEx ne vous renvoie pas cela (il retourne seulement le HANDLE du processus nouvellement créé).

On pourrait également énumérer tous les threads dans un processus particulier et ouvrir leurs poignées (OpenThread). Ainsi, vous pouvez créer un processus dans un état "suspendu", obtenir le handle de son seul thread (qui n'a pas encore démarré l'exécution), puis continuer.

Hélas, ShellExecuteEx ne vous permet pas non plus de créer un nouveau processus dans un état suspendu.

Afin que je ne vois pas un moyen propre de réaliser ce que vous voulez. Je suggère ce qui suit:

  1. Pourquoi voulez-vous le code de sortie du thread primaire de toute façon? Peut-être que le code de sortie du processus sera suffisant?
  2. Envisagez d'utiliser CreateProcess. Il a la fonctionnalité nécessaire.
  3. Quelques trucs sales peuvent aider, comme l'injection DLLs dans le processus nouvellement créé (accrochage) et etc.
1

Le code de sortie du thread principal est égal au code de sortie du processus IMHO.

+0

Il ne doit pas. On peut appeler 'ExitProcess (...)' avec n'importe quel code – valdo

Questions connexes