Я использую следующие строки для создания процесса:
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 [Версия 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C: \ Entwicklung \ ProcessTest \ ProcessTest \ bin \ Debug> вызвать "test.bat"
Jump_1
Jump_2
Вылетает, только если есть два перенаправления, если я удаляю одно, все в порядке.
Поскольку оригинальный скрипт поставляется с VS2010, я не могу изменить скрипт.
Редактировать: я обновил вопрос с более подробной информацией.