2016-07-11 9 views
1

Ich verwende die API-Funktion GetExitCodeProcess in der aktuell angemeldeten Benutzersitzung, um den Beendigungscode eines Prozesses zu überwachen. Dieser Prozess wird in einer anderen Sitzung (SYSTEM) ausgeführt. Die Funktion kehrt sofort mit einem Exit-Code von 0 zurück. Ich glaube nicht, dass das korrekt ist.GetExitCodeProcess fehlgeschlagen für Prozess in einer anderen Sitzung ausgeführt?

Kann jemand sagen, ob diese Funktion immer fehlschlägt/falsche Ergebnisse gibt, wenn der Prozess in einer anderen Sitzung gestartet wurde?

Mein VB6-Code ist dies, wenn jemand interessiert ist:

Public Function GetProcExitCode(ByVal uProcID As Long) As Long 

    Const STILL_ACTIVE = &H103& 
    Const PROCESS_QUERY_INFORMATION = &H400& 

    Dim lProcHnd As Long 
    lProcHnd = OpenProcess(PROCESS_QUERY_INFORMATION, True, uProcID) 

    Dim lTick As Long 
    lTick = GetTickCount 

    Dim lRet& 
    lRet = 0 

    'Wait for process end 
    Do 

     GetExitCodeProcess lProcHnd, lRet 

    Loop While lRet = STILL_ACTIVE 

    CloseHandle lProcHnd 

    GetProcExitCode = lRet 

    Dim lTicks& 
    lTicks = GetTickCount() - lTick 

    WriteLog "!!! GetExitCodeProcess needed " & lTicks & " ms." 

End Function 

Danke.

+0

Sie verfügen wahrscheinlich nicht über die erforderlichen Berechtigungen zum Öffnen des Prozesses. –

Antwort

1

Von Microsoft MSDN:

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlschlägt, ist der Rückgabewert Null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.


Einen Rückgabewert von Null zu geben scheint ein Fehler zu sein.

+0

Ihre Antwort ist großartig, das habe ich total übersehen. Vielleicht kann jemand mehr Einblicke geben, sonst werde ich Ihre Antwort als Antwort akzeptieren. Vielen Dank! – tmighty

+0

Ich denke, das braucht mehr Einsicht. Der Prozess wird mit einem Rückgabewert von 0 beendet und GetLastError gibt 0 zurück, daher kann dies nicht richtig sein. Wenn der Prozess erfolgreich beendet wurde, würde er nicht mit 0 zurückgeben, und wenn dies nicht der Fall wäre, würde GetLastError ungleich Null zurückgeben. Recht? – tmighty

+0

Vielleicht stehe ich jetzt wirklich dumm, aber ich benutze GetExitCodeProcess so oft, und mir ist es gelungen, der Rückgabewert ist 0. Ich habe entweder einen großen Fehler in der MSDN gefunden, oder ich sollte mein Gehirn waschen. – tmighty