我在当前登录的用户会话中使用API函数GetExitCodeProcess来监视进程的退出代码。此过程在另一个会话 (SYSTEM) 中运行。该函数立即返回,退出代码为 0。我认为这是不正确的。
如果进程在不同的会话中启动,任何人都可以判断此功能是否总是失败/给出错误的结果?
我的 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
谢谢。
来自 Microsoft MSDN:
返回值
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。若要获取扩展的错误信息,请调用 GetLastError。
给出零的返回值似乎是一个错误。