好吧,我有一个名为WC_Error_Resolution的程序,它是用C#编写的(.NET 4.0的C#控制台应用程序)。 该程序返回0,1或2,具体取决于运行程序时所做的操作。 如果我从cmd.exe调用它,一切工作正常。 但是,这里是我感到困惑的地方。 我有一个testing批处理脚本(真正的更大),就像这样调用它:
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%
这一次,它按预期工作。 我已经创build了大量的批处理脚本,像第一个例子那样调用.exe文件,并且从来没有遇到像这样的问题。 在WC_Error_Resolution.exe程序返回后脚本可能会停止执行的原因是什么?
编辑
————————————————– —
所以现在又出现了另一个我的程序。 两个程序都引用System.Xml.Linq
。 这些程序可以在Windows 7,Windows 8和Windows Server 2012 R2上编写脚本。 该程序无法在Windows Server 2008 R2上执行,并且不显示任何错误。 该脚本根本不会执行程序调用下的程序或命令。 简单的说,这是一个在64位环境下运行的32位程序,并启用了WoW64。 在Windows Server 2008 R2上运行的.NET应用程序是否存在一些我不知道的问题?
这个答案(通过使用C ++的例子)在这个问题的答案中:
如何从Windows命令行获取应用程序退出代码?
如果程序从控制台分离,那么批处理文件将在程序运行时继续执行,并且START /B /WAIT
是正确的解决方法以获取错误errorlevel
。 如果你不明白为什么C#程序从控制台分离出来,你可能想要问一个基于C#程序提取的问题。