为什么此程序正确显示消息框,但未设置错误级别?
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
总是返回0
.
我尝试了x64,x86和unicode以及MBCS编译选项.全部0
作为错误级别/状态代码提供.
如果您的程序是Windows应用程序而不是控制台应用程序,则命令解释程序不会等待它完成(在您按OK之前,请查看命令窗口,您将看到它已准备好进行下一个命令).
如果是这种情况,将应用程序构建为控制台子系统应用程序将解决问题.如果您需要作为Windows应用程序运行,您可能会尝试等待命令完成,看看是否有效(我没有尝试过,但这似乎是一个很好的方法):
start /wait a.exe echo %ERRORLEVEL%