Как перенаправить стандартный вывод при порождении процесса - PullRequest
2 голосов
/ 23 мая 2011

Я создал веб-сервис для внутреннего сервера, на который я хочу отправить команду и запустить ее.Поэтому я хочу отправить ему команду следующим образом:

http://machine:999/execute?path=c:\scripts\dostuff.exe&args=-test

Затем конечная точка будет делать что-то вроде этого:

public ActionResult(string path, string args)
{

    var proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = path;
    proc.StartInfo.Arguments = args;
    proc.StartInfo.UseShellExecute = false;
    proc.StartInfo.CreateNoWindow = true;
    proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    proc.StartInfo.RedirectStandardOutput = true;

    //Hook into all standard output here

    //Block until process is returned - Async Controller action

    return Content(output.ToString())
}

Я хочу иметь возможность перехватывать все сообщения об ошибках.и стандартный вывод, сгенерированный исполняемым файлом.Исполняемый файл может быть как консольное приложение, так и скрипт powershell.Как лучше всего делать что-то подобное?

1 Ответ

1 голос
/ 23 мая 2011

Используйте proc.StandardOutput.ReadToEnd (), чтобы прочитать перенаправленный поток вывода до конца и вернуть его.

Вы также можете установить для RedirectStandardError значение True и сделать то же самое с proc.StandardError, чтобы получить сообщения об ошибках. Вы можете создать фоновый поток для синхронного чтения стандартной ошибки наряду со чтением стандартного вывода в основном потоке.

...