我目前正在开发一个WPF应用程序,该应用程序在ExitCode
中提供Windows Eventlog
。
在某些情况下,我需要立即取消执行。
因此我使用Environment.Exit(someInteger)
。
还需要通过批处理启动它并检查是否ErrorLevel is NOT 0
。
通过VisualStudio OutputConsole输出:
The program '[6908] MyApp.vshost.exe: Program Trace' has exited with code 0 (0x0).
The program '[6908] MyApp.vshost.exe' has exited with code 3 (0x3).
CMD输出:
cd MyVisualStudioDebugDir
MyApp.exe
echo %errorlevel%
=> returns 0
为什么我拨打电话 Environment.Exit(3)
时会收到0?
答案 0 :(得分:2)
我不是百分百确定,但它可能与您在脚本中调用EXE的方式有关。为了模仿你的情况,我创建了一个简单的WPF应用程序,它立即通过Environment.Exit(3);
退出,然后是一个简单的test.cmd
脚本:
@echo off
start /wait TestApp.exe
echo %ERRORLEVEL%
事实上回应的是3
。
更新:我注意到如果在没有start
选项的情况下使用/wait
,则无法正确设置ERRORLEVEL。我相信这是因为start
在继续之前不会等待应用程序退出。因此,您可以使用start /wait TestApp.exe
或call TestApp.exe
。我已经更新了上面的例子。
答案 1 :(得分:0)
在命令行上,CMD.EXE不等待应用程序执行 终止,控制权立即返回命令提示符。
在命令脚本中CMD.EXE将暂停初始脚本并等待 以便应用程序在继续之前终止。
Description about cmd and exit codes
因此,将您的应用程序启动命令放入批处理文件,然后在cmd中运行该批处理文件。
myBat.bat
MyApp.exe
echo %errorlevel%
错误级别将是正确的。