代码之家  ›  专栏  ›  技术社区  ›  Brian R. Bondy

为什么winmain不设置错误级别?

  •  6
  • Brian R. Bondy  · 技术社区  · 17 年前

    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
      MessageBox(NULL, _T("This should return 90 no?"), _T("OK"), MB_OK);
      return 90;
    }
    

    我将上面的代码编译成一个名为a.exe的可执行文件。我在命令提示符下执行了以下操作:

    c:\> a.exe 
     (message box is displayed, I press ok)
    c:\> echo %ERRORLEVEL% 
      0
    

    如果我使用 exit(90); 就在回来之前。它仍然说 0

    我还试图通过 CreateProcess 并以 GetExitCodeProcess 0

    我最初在一个更复杂的程序中看到这个问题,所以我制作了这个简单的程序来验证这个问题。结果是一样的,两个程序都有 WinMain 总是回来

    我尝试了x64、x86以及unicode和MBCS编译选项。全力以赴 0 作为错误级别/状态代码。

    2 回复  |  直到 12 年前
        1
  •  15
  •   jdigital    16 年前

    如果您的程序是Windows应用程序,而不是控制台应用程序,则命令解释器不会等待它完成(在按“确定”之前,查看命令窗口,您将看到它已准备好执行下一个命令)。

    start /wait a.exe
    echo %ERRORLEVEL%
    
        2
  •  2
  •   Michael Burr    17 年前

    %ERRORLEVEL%

    echo %CMDEXTVERSION%
    

    查看是否启用了扩展。我明白了 2 %CMDEXTVERSION% “当他们离开的时候。

    您还可以使用旧样式测试errorlevel:

    if errorlevel 1 echo errorlevel is 1 or more...
    

    无论扩展名是什么,或者如果有人设置了名为 ERRORLEVEL