我如何知道我是否从GetExitCodeProcess获取实际的退出代码?

时间:2019-07-23 14:58:31

标签: c windows winapi exit-code

我正在制作一个程序,用于检查现有流程并返回其退出代码... 如果,这是一个退出代码。如果程序出错,则返回-1。

我现在的代码如下:

HANDLE hProcess = OpenProcess( SYNCHRONIZE | PROCESS_QUERY_INFORMATION, FALSE, pid );
if(!hProcess) {
    switch (GetLastError()) {
       //Handle errors and such
    }
} else {
    WaitForSingleObject(hProcess, INFINITE);
    int exit_code;
    GetExitCodeProcess(hProcess, &exit_code);
    return exit_code;
}

但是,正如documentation所说,GetExitCodeProcess可以返回退出代码或EXCEPTION VALUE。我不要异常值!如果过程出错,我想返回-1!

有什么办法可以区别吗?有没有一种简单的方法可以告诉您进程已崩溃?

1 个答案:

答案 0 :(得分:1)

除非您对其进行调试,否则我认为您无法从过程中得知。

忽略线程,从概念上讲,您可以这样想:

MainThread(EXE*exe)
{
  __try
  {
    NTDLL_LoadDlls(exe);
    int retval = exe->WinMain();
    ExitThread(retval); // Exits the process if there is only one thread
  }
  __catch(...)
  {
    int exceptcode = getexceptioncode();
    WER_ReportCrash(exe, exceptcode);
    TerminateProcess(GetCurrentProcess(), exceptcode);
  }
}

0通常表示成功,1表示一般性失败,其他任何情况都可能是一个问题。低代码(<= 255)可能具有含义,但它们是程序特定的。 > = 0xC0000000可能是当机。