четверг, 16 декабря 2010 г.

Перенаправление бинарного вывода процесса

В .Net для запуска одного процесса из под другого используется класс System.Diagnostics.Process.
Ниже приведен пример того, каким образом нужно перенаправлять БИНАРНЫЙ! вывод дочернего процесса.
В своем примере я запускаю утилиту "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.

Комментариев нет:

Отправить комментарий