c # вызов пакета с ошибкой перенаправления и выполнения через cmd через процесс - PullRequest
3 голосов
/ 21 сентября 2011

Я использую следующие строки для создания процесса:

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, я не могу изменить скрипт.


Редактировать: я обновил вопрос с более подробной информацией.

1 Ответ

1 голос
/ 27 октября 2011

Сбой перенаправления на nul или перенаправление с stderror на stdout (2>&1)?

Ваш код не устанавливает RedirectStandardError в true, вы должны установить для него значение true, и оно должно работать.

...