C# 批处理脚本在调用exe后错误退出

C# 批处理脚本在调用exe后错误退出,c#,windows,batch-file,cmd,windows-server-2008-r2,C#,Windows,Batch File,Cmd,Windows Server 2008 R2,好的,我有一个名为WC#u Error#u Resolution的程序,它是用C#(C#Console Application with.net4.0)编写的。此程序返回0、1或2,具体取决于运行程序时执行的操作。如果我从cmd.exe调用它,一切正常。然而,这里是我感到困惑的地方。我有一个测试批处理脚本(真正的脚本要大得多),它调用如下: ECHO Start WC_Error_Resolution.exe file1.xml file2.xml inifile.ini log

好的,我有一个名为WC#u Error#u Resolution的程序,它是用C#(C#Console Application with.net4.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应用程序是否存在一些我不知道的问题

> P(这是用C++例子)回答的问题:


如果程序从控制台分离,则批处理文件将在程序运行时继续,而
开始/B/WAIT
是获得
错误级别的正确方法。如果你看不出为什么C#程序会从控制台分离,你可能想问另一个基于C#程序摘录的问题。

你的
WC#u Error_Resolution.exe
应用程序是32位还是64位控制台应用程序?为什么在第二批中使用
/B
?控制台应用程序是否正确退出并返回0main()
中编码>(或1或2)?在Visual Studio中以调试模式运行应用程序,并检查其实际退出方式。项目的生成属性将目标平台指定为“任意CPU”。我应该改为x86吗?我之所以使用/B是因为对exe的调用是更大脚本的一部分,所以我不希望在执行过程中出现第二个窗口。应用程序正常运行,当未更改任何内容时,退出代码为0;当更改特定文件时,退出代码为1;当出现错误时,退出代码为2。在VS中运行良好。当我像第一个示例那样编写脚本时,第二个echo不会执行,但是如果在脚本返回后在命令行上键入
echo ERRORLEVEL=%ERRORLEVEL%
,我得到了正确的退出代码。请参阅使用x86配置显式构建控制台应用程序,并测试这是否有影响。我将向您介绍“任何CPU”的含义。基于此,我不希望在执行行为上有任何差异,但会尝试一下并返回结果。
start/B/W”“
CREATE\u NEW\u PROCESS\u GROUP
添加到流程创建标志中。在64位Windows 7中,当我将
C:\Windows\System32\where.exe
作为测试用例运行时,比较两种情况下传递给
CreateProcessW
的参数时,这是我看到的唯一主要区别。如果您删除
/B
选项(必要时在末尾添加
暂停
),它是否会在新窗口中正确回响?这不再是一个问题,因为我们已经改变了流程来解决它。然而,我要说的是,链接的答案虽然有用,但并不一定适用,因为被调用的程序是一个控制台程序。除非这同样适用于c#控制台应用程序。是的:控制台应用程序可以分离控制台,并且可以使用windows,这可能是您的应用程序的情况,这就是为什么我要这样做。如果是这样的话,您认为这一问题会出现在机器上吗?这只发生在我同事的机器上。