Ниже приведен пример того, каким образом нужно перенаправлять БИНАРНЫЙ! вывод дочернего процесса.
В своем примере я запускаю утилиту "icat" из пакета "The Sleuth Kit", которая должна быть запущена от имени суперпользователя.
ProcessStartInfo si = new ProcessStartInfo("icat", "<аргументы командной строки для утилиты icat>");
si.UseShellExecute = false; //необходимо, чтобы получить возможность перенаправлять потоки
si.RedirectStandardOutput = true; //сообщаем о том, что мы будем перенаправлять именно поток вывода
si.UserName = "root"; //нужно, если собираетесь запускать вызываемую программу от имени другого пользователя
si.Password = new System.Security.SecureString(); //ваш пароль, то же что и для UserName
Process proc = new Process();
proc.StartInfo = si;
proc.Start();
//proc.WaitForExit(); а вот этого делать нельзя!
//WaitForExit можно вызывать только после полного считывания выходного потока
using (var r = new BinaryReader(proc.StandardOutput.BaseStream))
using (var w = new BinaryWriter(File.Create("<путь к фалу, куда направить output>")))
{
//копируем содержимое
}
* This source code was highlighted with Source Code Highlighter.
Комментариев нет:
Отправить комментарий