Process.Start — невозможно отправить вывод в файл журнала

У меня есть следующий код

var parameters =
    string.Format("TestSuiteDefinitions.dll /include:{0} /out:{1} /err:{2} /xml:{3}", String.Join(",", args), OutputLog, ErrorLog, ResultLog);

var p = Process.Start(GetAssemblyDirectory() + @"\NUnit\nunit-console.exe", parameters);

Что позволяет мне из моего приложения запускать отдельный процесс, запускающий консоль NUnit с нужными мне выводами. Проблема в том, что фактический вывод NUnit — это единственное, что записывается в журналы. Если процесс завершается сбоем по какой-либо другой причине, выходные данные команды, которые вы могли бы увидеть из nunit-console.exe на уровне командной строки, будут потеряны.

я пытался добавить

> CommandOutput.txt

or

| CommandOutput.txt

в конце строки параметра Process.Start, но тогда выдает ошибку, так что это не нравится.

Может ли кто-нибудь предложить, как это сделать? И я не могу использовать стандартный поток вывода процесса, поскольку вызывающий процесс должен быть закрыт, как только запускается другой процесс, поэтому он не может оставаться открытым для чтения и записи потока.


person NZJames    schedule 09.05.2012    source источник
comment
Каково значение p, когда оно терпит неудачу или завершается.   -  person Sean Barlow    schedule 09.05.2012


Ответы (1)


Process.Start не запускает оболочку, а просто порождает процесс. Так что неудивительно, что перенаправления и пайпы не работают. Вы можете передать экземпляр ProcessStartInfo в Process.Start, где вы можете установить RedirectStandardOutput и записать его в файл самостоятельно из p.StandardOutput.

person Joey    schedule 09.05.2012
comment
Единственная проблема заключается в том, что мой вызывающий проект должен оставаться открытым до тех пор, пока другой процесс не завершится и не завершится. Мне нужно, чтобы вызывающий проект закрылся после того, как он породил новый процесс, и чтобы новый процесс отвечал за направление своего стандартного вывода куда-то. Это возможно? - person NZJames; 09.05.2012
comment
Если процесс не может сам записать выходные данные в файл, вам всегда понадобится другой процесс, чтобы прочитать его выходные данные и записать их в файл. Другое дело, ваше собственное или cmd. - person Joey; 09.05.2012