Процесс не работает - PullRequest
       3

Процесс не работает

0 голосов
/ 27 августа 2011

Я попытался вызвать процесс (консольное приложение), используя следующий код:

       ProcessStartInfo pi = new ProcessStartInfo();
        pi.UseShellExecute = false;
        pi.RedirectStandardOutput = true;
        pi.CreateNoWindow = true;
        pi.FileName = @"C:\fakepath\go.exe";
        pi.Arguments = "FOO BAA";
        Process p = Process.Start(pi);
        StreamReader streamReader = p.StandardOutput;
        char[] buf = new char[256];
        string line = string.Empty;
        int count;
        while ((count = streamReader.Read(buf, 0, 256)) > 0)
        {
            line += new String(buf, 0, count);
        }

Это работает только в некоторых случаях.Файл, который не работает, имеет размер 1,30 МБ, я не знаю, является ли это причиной его неправильной работы.line возвращает пустую строку.Надеюсь, это понятно.Может кто-нибудь указать на мою ошибку?Заранее спасибо.

1 Ответ

2 голосов
/ 27 августа 2011

Пара мыслей:

  1. Различные методы чтения * потокового ридера требуют, чтобы ваше приложение было завершено до их запуска, в противном случае вы можете не получить никакого вывода в зависимости от проблем синхронизации. Возможно, вы захотите взглянуть на функцию Process.WaitForExit (), если хотите использовать этот маршрут.

    Кроме того, если у вас нет особой причины для выделения буферов (боль в IMO), я бы просто использовал readline () в цикле, или, поскольку процесс завершился, ReadToEnd (), чтобы получить весь вывод. От вас также не требуется создавать массивы char, что открывает математические ошибки с размерами буфера.

  2. Если вы хотите работать асинхронно и выводить данные во время работы, вам нужно использовать функцию BeginOutputReadLine () (см. MSDN)

  3. Не забывайте, что ошибки обрабатываются по-разному, поэтому, если по какой-либо причине ваше приложение пишет в STDERR, вы захотите использовать соответствующие функции вывода ошибок, чтобы также прочитать эти выходные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...