Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未在CMD上返回ExitCode_C#_Wpf_Batch File_Cmd_Exit Code - Fatal编程技术网

C# 未在CMD上返回ExitCode

C# 未在CMD上返回ExitCode,c#,wpf,batch-file,cmd,exit-code,C#,Wpf,Batch File,Cmd,Exit Code,我目前正在开发一个WPF应用程序,它提供了可在Windows事件日志中找到的ExitCodes 在某些情况下,我需要立即取消执行。 因此,我使用Environment.Exit(someInteger)。 还需要通过批处理启动它,并检查错误级别是否不是0 通过VisualStudio输出控制台输出: The program '[6908] MyApp.vshost.exe: Program Trace' has exited with code 0 (0x0). The program '

我目前正在开发一个WPF应用程序,它提供了可在
Windows事件日志中找到的
ExitCode
s

在某些情况下,我需要立即取消执行。 因此,我使用
Environment.Exit(someInteger)
。 还需要通过批处理启动它,并检查
错误级别是否不是0


通过VisualStudio输出控制台输出:

 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).
cd MyVisualStudioDebugDir
MyApp.exe
echo %errorlevel% 
=> returns 0
CMD输出:

 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).
cd MyVisualStudioDebugDir
MyApp.exe
echo %errorlevel% 
=> returns 0


为什么我在调用
环境时在这里得到0。退出(3)
我不是100%确定,但这可能与您在脚本中调用EXE的方式有关。为了模拟您的情况,我创建了一个简单的WPF应用程序,它通过
Environment.Exit(3)立即退出test.cmd
脚本:

@echo off

start /wait TestApp.exe
echo %ERRORLEVEL%
实际上,发出的回声是
3

更新:我注意到,如果在没有
/wait
选项的情况下使用
start
,则错误级别设置不正确。我认为这是因为
start
不会等到应用程序退出后再继续。因此,您可以使用
start/wait TestApp.exe
或简单地
调用TestApp.exe
。我已经更新了上面的例子

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

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

因此,将应用程序启动命令放在批处理文件中,并在cmd中运行该批处理文件

myBat.bat

MyApp.exe
echo %errorlevel%

错误级别将是正确的。

我当前正在调用MainClass构造函数中的.Exit(),并从VS Debug目录启动exe。对我来说,它不起作用:(我遗漏了什么?我更新了答案。我相信如果没有
/wait
选项(或者简单地使用
呼叫
),就不能使用
启动
)。这就是问题所在:D我真的不明白为什么,但它已经解决了。多亏了我的直觉,我倾向于一种可能的竞争条件。如果脚本在应用程序退出之前检查ERRORLEVEL值,那么你就看不到更新的错误代码。
/wait
选项或使用
call
可以防止脚本在应用程序退出之前继续运行这个问题实际上是不存在的。如果您使用
start/wait MyApp.exe
的结果与仅使用
MyApp.exe
的结果相同。原始问题没有提到任何
start
命令……您确定示例中的前几行没有放在括号内吗?在这种情况下,您需要启用延迟扩展并使用e> echo!errorlevel!
改为“程序跟踪”是一个辅助进程,为VS2015诊断工具提供信息。它从实际程序中收集ETW事件,以便VS可以向您显示cpu和内存使用统计信息。当然,它没有问题,看到它以代码0退出是正常的。您使用%errorlevel%的方式仅适用于控制台模式的应用程序。WPF应用程序启动时没有任何错误cmd.exe正在等待它完成。