为什么不WinMain函数设置错误级别?
-
09-09-2019 - |
题
为什么这个程序正确地显示一个消息框,但不设置误差水平?
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
”
不隶属于 StackOverflow