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提供的,我不能改变脚本。
编辑:我用更多的细节更新了问题。
是重定向到nul
失败,还是从stderror
重定向到stdout (2>&1)
失败
您的代码没有将RedirectStandardError
设置为true,您应该将其设置为true,它应该工作