Je dois vérifier si un processus avec un HANDLE donné est toujours en cours d'exécution, j'ai essayé de le faire en utilisant le code suivant mais il retourne toujours à la deuxième valeur false, même si le processus est en cours .Détection si un processus est toujours en cours
bool isProcessRunning(HANDLE process)
{
if(process == INVALID_HANDLE_VALUE)return false;
DWORD exitCode;
if(GetExitCodeProcess(process, &exitCode) != 0)
return false;//always returns here
return GetLastError() == STILL_ACTIVE;//still running
}
Juste besoin d'ajouter un chèque pour le INVALID_HANDLE_VALUE depuis signalé le processus était en cours d'exécution quand ce n'était pas encore valide :) –
Les API telles que WaitForSingleObject ne devraient jamais retourner INVALID_HANDLE_VALUE si vous avez un handle de processus ouvert, même s'il est terminé. Le handle et l'objet sous-jacent doivent rester ouverts jusqu'à leur fermeture explicite par les processus de référencement (ou ces processus sont terminés). Etes-vous sûr que vous n'essayez pas de l'appeler sur l'ID de processus et pas un handle? –
Je voulais dire une vérification avant le WaitForSingleObject, dans le cas où le processus n'avait pas encore été créé, donc le handle était toujours à la valeur que je l'initialisais, à savoir INVALID_HANDLE_VALUE, car passer INVALID_HANDLE_VALUE à WaitForSingleObject expire toujours (ie INVALID_HANDLE_VALUE est jamais dans un état signalé, il semble). –