批处理脚本在调用exe后错误地退出
好吧,我有一个名为WC_Error_Resolution的程序,它是用C#(.NET 4.0的C#控制台应用程序)编写的。此程序根据运行程序时所做的操作返回0,1或2。如果我从cmd.exe调用它,一切工作正常。但是,这里是我感到困惑的地方。我有一个测试批处理脚本(真正的一个大得多)调用它像:批处理脚本在调用exe后错误地退出
ECHO Start
WC_Error_Resolution.exe file1.xml file2.xml inifile.ini log1.log log2.log
ECHO ERRORLEVEL=%ERRORLEVEL%
的这里的问题是,第二回声永远不会被执行。第二个脚本进入程序,它调用它并退出批处理脚本。然后我决定尝试:
ECHO Start
START /B /WAIT "" WC_Error_Resolution.exe file1.xml file2.xml inifile.ini log1.log log2.log
ECHO ERRORLEVEL=%ERRORLEVEL%
这一次,它按预期工作。我创建了大量批处理脚本,它们像第一个示例一样调用.exe文件,并且从未遇到过这样的问题。什么可能导致脚本在WC_Error_Resolution.exe程序返回后停止执行?
编辑
----------------------------------------- ------------
所以现在这是显示与我的另一个程序。这两个方案都参考System.Xml.Linq
。这些程序可以在Windows 7,Windows 8,& Windows Server 2012 R2上编写脚本。这些程序无法在Windows Server 2008 R2上执行,并且不显示任何错误。脚本根本不会执行程序调用下的程序或命令。请注意,这是一个在启用了WoW64的64位环境中运行的32位程序。在Windows Server 2008 R2上运行的.NET应用程序有一些我不知道的问题吗?
这回答(通过使用C++示例的)中的答案的问题:
How do I get the application exit code from a Windows command line?
如果程序从控制台分离然后批处理文件继续在程序运行和START /B /WAIT
正确的解决方法是获取errorlevel
。如果你不明白为什么C#程序从控制台分离出来,你可能想要问一个基于C#程序摘录的另一个问题。
您的'WC_Error_Resolution.exe'应用程序是32位还是64位控制台应用程序?为什么在第二批中使用'/ B'? 'main()'中的'return 0;'(或1或2)不会退出您的控制台应用程序?在Visual Studio中以调试模式运行应用程序,并检查它是如何真正退出的。 – Mofi 2014-10-01 21:29:12
项目的构建属性将目标平台指定为“任何CPU”。我应该改为x86吗?我使用/ B是因为对exe的调用是一个更大的脚本的一部分,所以我不想在执行过程中出现第二个窗口。应用程序正常运行,并且在没有任何更改时退出代码为0,当特定文件被更改时为1,错误时为2。在VS中运行良好。当我像第一个例子那样编写脚本时,第二个echo将不会被执行,但是如果在脚本返回后在命令行输入'ECHO ERRORLEVEL =%ERRORLEVEL%',我会得到正确的退出代码。 – Josh 2014-10-02 12:50:15
请参阅[Visual Studio“任何CPU”目标是什么意思?](http://*.com/questions/516730/)使用x86配置显式构建您的控制台应用程序,并测试是否有所作为。 – Mofi 2014-10-02 14:02:13