2016-07-11 67 views
1

我在當前登錄的用戶會話中使用API​​函數GetExitCodeProcess來監視進程的退出代碼。此過程在另一個會話(SYSTEM)中運行。 函數立即返回,退出代碼爲0. 我不認爲這是正確的。GetExitCodeProcess無法在另一個會話中運行進程?

任何人都可以告訴如果這個函數總是會失敗/如果進程已經在不同的會話中啓動,會給出錯誤的結果嗎?

我的VB6的代碼是這樣的,如果有人有興趣:

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 

謝謝。

+0

您可能沒有必要的權限來打開該過程。 –

回答

1

Microsoft MSDN

返回值

如果函數成功,返回值是非零。

如果函數失敗,返回值爲零。要獲得擴展的錯誤信息,請調用GetLastError。


給出返回值爲零似乎是一個錯誤。

+0

你的回答很好,我完全忽略了這一點。也許有人可以提供更多的見解,否則我會接受你的答覆作爲答案。非常感謝你! – tmighty

+0

我認爲這需要更多的洞察力。該進程退出時返回值爲0,並且GetLastError返回0,所以這不可能是正確的。如果進程成功退出,它不會返回0,如果不成功,GetLastError將返回非零值。對? – tmighty

+0

也許我現在真的很笨,但我經常使用GetExitCodeProcess,對我而言,成功的是返回值爲0.我在MSDN中發現了一個很大的缺陷,或者我應該洗腦。 – tmighty

相關問題