c#调用批处理与错误重定向和exe在CMD通过进程

本文关键字:CMD 进程 exe 批处理 调用 错误 重定向 | 更新日期: 2023-09-27 18:09:09

我使用以下行创建一个进程:

process.StartInfo.FileName = "cmd.exe";
process.StartInfo.WorkingDirectory = buildProject.DirectoryName;
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;

然后我启动进程并传递一些命令给它:

process.Start();
StreamWriter stream = process.StandardInput;
// call batch
stream.WriteLine(@"call ""test.bat""");
// call exe
stream.WriteLine("echo msbuild!");
// exit-command
stream.WriteLine("exit");

所有工作正常,直到批处理文件包含两个空重定向:

@call :Jump_1
@call :Jump_2
@goto end

@REM -----------------------------------------------------------------------
:Jump_1
@echo Jump_1
@call :Jump_1_1 1>nul 2>&1                   REM critical!!!
@exit /B 0
:Jump_1_1
@echo Jump_1_1
@exit /B 0

@REM -----------------------------------------------------------------------
:Jump_2
@echo Jump_2
@call :Jump_2_1 1>nul 2>&1                   REM critical!!!
@exit /B 0
:Jump_2_1
@echo Jump_2_1
@exit /B 0

@REM -----------------------------------------------------------------------
@echo End
:end

在这种情况下,进程立即停止。StandardOut显示如下:

Microsoft Windows XP [Version 5.1.2600]

(C) Copyright 1985-2001 Microsoft Corp.

C: ' Entwicklung ' ProcessTest ' ProcessTest ' bin '调试>调用"test.bat"

Jump_1

Jump_2

只有当有两个重定向时才会崩溃,如果我删除一个,一切都很好。

因为原来的脚本是VS2010提供的,我不能改变脚本。


编辑:我用更多的细节更新了问题。

c#调用批处理与错误重定向和exe在CMD通过进程

是重定向到nul失败,还是从stderror重定向到stdout (2>&1)失败

您的代码没有将RedirectStandardError设置为true,您应该将其设置为true,它应该工作