为什么这个程序正确地显示一个消息框,但不设置误差水平?

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的可执行的代码。所述I在命令提示这样做:

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

我得到相同的结果,如果我回来之前使用权exit(90);。它仍然说0

我还试图通过CreateProcess启动该程序并获得与GetExitCodeProcess的结果,但它也返回0我。我做了错误检查,以确保它是所有正确启动。

我最初看到了一个更复杂的程序这个问题,让我做了这个简单的程序,以确认问题。结果是相同的,即一直WinMain两个程序返回0

我尝试都的X64,X86和Unicode和MBCS编译选项。这一切都使0为错误的水平/状态代码。

有帮助吗?

解决方案

如果你的程序是一个Windows应用程序,而不是一个控制台应用程序,命令解释器不等待它完成(按确定之前,先来看看命令窗口,你会看到它的准备下一个命令)。

如果是这种情况,构建应用程序的控制台子系统的应用程序将解决这个问题。如果您需要作为一个Windows应用程序运行,你可以尝试等待命令完成,看看是否能工作(我还没有试过,但它似乎是一个不错的方法):

start /wait a.exe
echo %ERRORLEVEL%

其他提示

有关%ERRORLEVEL%工作,你必须有命令扩展启用(我认为这是默认的,因为神知道什么时候)。

尝试这样做:

echo %CMDEXTVERSION%

要查看是否扩展功能,使能。我得到当他们在“2”输出和“%CMDEXTVERSION%”当它们关闭。

您也可以使用老式测试错误级别:

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

这应该不管工作扩展或如果有人设置一个环境变量的名称为“ERRORLEVEL

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top