Захват и отображение вывода консоли одновременно - PullRequest
2 голосов
/ 16 марта 2010

MSDN заявляет, что в .NET возможно захватить выходные данные процесса и отображают его в окне консоли одновременно.

Обычно, когда вы устанавливаете StartInfo.RedirectStandardOutput = true; окно консоли остается пустым. Поскольку сайт MSDN не предоставляет образец для этого, мне было интересно, есть ли у кого-нибудь образец или может указать мне образец?

Когда процесс записывает текст в свой стандартный поток, этот текст обычно отображается на консоли. От перенаправление StandardOutput поток, вы можете манипулировать или подавлять вывод процесса. Например, Вы можете отфильтровать текст, отформатировать его иначе, или напишите вывод и консоль и назначенный лог файл. 1011 * MSDN *

Этот пост похож на Захватывает стандартный вывод и, тем не менее, отображает его в окне консоли . Но этот пост не закончился рабочим образцом.

Большое спасибо,

Patrick

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Вы можете легко поймать все сообщения, используя

Process build = new Process();
...
build.StartInfo.UseShellExecute = false;
build.StartInfo.RedirectStandardOutput = true;
build.StartInfo.RedirectStandardError = true;
build.StartInfo.CreateNoWindow = true;
build.ErrorDataReceived += build_ErrorDataReceived;
build.OutputDataReceived += build_ErrorDataReceived;
build.EnableRaisingEvents = true;
...

и создайте Событие build_ErrorDataReceived

static void build_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
    string msg = e.Data;
    if (msg != null && msg.Length > 0)
    {
        // in msg you have the line you need!
    }
}

Я добавляю маленький пример

Скринкаст приложения

Файлы решений (VS 2008)

0 голосов
/ 16 марта 2010

Смотрите этот ответ здесь на SO , который я опубликовал для процесса, чтобы выполнить netstat для перенаправления потока вывода на экземпляр Stringbuilder. Процесс создает скрытое окно и не виден ...

Вы можете немного изменить код, изменив значения соответственно

ps.CreateNoWindow = true; <--- Comment this out...
ps.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; <--- Comment this out...
...