好吧,我有一个名为 WC_Error_Resolution 的程序,它是用 C# 编写的(C# 控制台应用程序与 .NET 4.0)。该程序根据运行程序时执行的操作返回 0、1 或 2。如果我从 cmd.exe 调用它,一切正常。但是,这是我感到困惑的地方。我有一个测试批处理脚本(真正的脚本要大得多),它是这样调用的:
ECHO Start
WC_Error_Resolution.exe file1.xml file2.xml inifile.ini log1.log log2.log
ECHO ERRORLEVEL=%ERRORLEVEL%
这里的问题是第二个 echo 永远不会被执行。脚本到达程序的第二个,它调用它并退出批处理脚本。然后我决定尝试:
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# 程序的摘录提出另一个问题。
关于c# - 批处理脚本在调用 exe 后错误退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148180/