Мой вопрос отличается от выбранного. Очевидно, что я назвал метод BeginErrorReadLine (я отмечаю его в коде ниже).
Я хочу проанализировать результат, созданный Handle
Командная строка
При запуске в среде командной строки он выводит что-то вроде:
> handle64 -p [PID]
Nthandle v4.11 - просмотрщик ручек
Copyright (C) 1997-2017 Марк Руссинович
Sysinternals - www.sysinternals.com
10: Файл C:\Windows
1C: Файл C:\Windows\SysWOW64
[PID] - любой идентификатор текущего процесса
Выход разделен.
Первые 5 строк (включая пустые строки) переходят к стандартной ошибке, последние 2 строки идут на стандартный вывод.
Поэтому я могу удалить заголовок, перенаправляя:
> handle64 -p [PID] 2> nul
10: Файл C:\Windows
1C: Файл C:\Windows\SysWOW64
Приложение Winform
Затем я пытаюсь реализовать эту команду в приложении winform С#:
Stream streamOut, streamErr;
var p = Process.Start(new ProcessStartInfo
{
FileName = "handle64.exe",
Arguments = "-p [PID]",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
});
p.OutputDataReceived += (sender, e) =>
{
streamOut.Write("Output => " + e.Data);
};
p.ErrorDataReceived += (sender, e) =>
{
streamErr.Write("Error => " + e.Data);
};
p.BeginOutputReadLine();
p.BeginErrorReadLine(); // !!!
p.WaitForExit();
Затем я нахожу, что все идет на стандартный вывод.
Вопрос
Хорошо, я могу отделить заголовок и тело кодом.
Вопрос в том, почему выход программы ведет себя по-разному между двумя средами?
Могу ли я заставить результат в приложении winform вести себя как в командной строке?
Обновить
Для комментария Damien, я пытаюсь запустить программу через 'cmd', к сожалению, я получаю тот же результат:
var p = Process.Start(new ProcessStartInfo
{
FileName = "cmd",
Arguments = "/C handle64.exe -p [PID]",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
});
...
В окне вывода:
Выход =>
Выход => Nthandle v4.11 - просмотрщик ручек
Выход => Авторское право (C) 1997-2017 гг. Марк Руссинович
Выход => Sysinternals - www.sysinternals.com
Выход =>
Вывод => 10: Файл C:\Windows
Output => 1C: Файл C:\Windows\SysWOW64
Ошибка =>