在CMD上没有返回ExitCode

时间:2015-12-16 15:08:24

标签: c# wpf batch-file cmd exit-code

我目前正在开发一个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?

2 个答案:

答案 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.execall TestApp.exe。我已经更新了上面的例子。

答案 1 :(得分:0)

  

在命令行上,CMD.EXE不等待应用程序执行   终止,控制权立即返回命令提示符。

     

在命令脚本中CMD.EXE将暂停初始脚本并等待   以便应用程序在继续之前终止。

Description about cmd and exit codes

因此,将您的应用程序启动命令放入批处理文件,然后在cmd中运行该批处理文件。

myBat.bat

MyApp.exe
echo %errorlevel%

错误级别将是正确的。