Ich muss überprüfen, ob ein Prozess mit einem bestimmten HANDLE noch läuft, ich habe versucht, es mit dem folgenden Code zu tun, aber es immer bei der zweiten Rückgabe false zurückgibt, auch wenn der Prozess ausgeführt wird .Erkennen, ob ein Prozess noch läuft
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
}
einfach einen Scheck für die INVALID_HANDLE_VALUE hinzuzufügen benötigt, da, dass der Prozess berichtet wurde, läuft wenn es nicht einmal gültig war :) –
APIs wie WaitForSingleObject sollten niemals INVALID_HANDLE_VALUE zurückgeben, wenn ein Prozess-Handle offen ist, selbst wenn es beendet wird. Das Handle und das zugrunde liegende Objekt müssen offen bleiben, bis sie von den referenzierenden Prozessen explizit geschlossen werden (oder diese Prozesse werden beendet). Sind Sie sicher, dass Sie nicht versuchen, die Prozess-ID und nicht ein Handle aufzurufen? –
Ich meinte eine Überprüfung vor dem WaitForSingleObject, falls der Prozess noch nicht erstellt wurde, so dass das Handle immer noch auf dem Wert war, auf den ich es initialisiert habe, zB INVALID_HANDLE_VALUE, da INVALID_HANDLE_VALUE immer an WaitForSingleObject abläuft (dh INVALID_HANDLE_VALUEist nie drin) ein signalisierter Zustand scheint es). –