首页 > 解决方案 > 我如何知道我是否从 GetExitCodeProcess 获得了实际的退出代码?

问题描述

我正在制作一个程序来检查现有进程并返回其退出代码......如果它是退出代码。如果程序出错,则返回 -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;
}

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

有什么方法可以区分吗?有没有一种简单的方法来判断进程崩溃了?

标签: cwindowswinapiexit-code

解决方案


我认为除非您对其进行调试,否则您无法从流程外部分辨出来。

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

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 可能是崩溃。


推荐阅读