Мой вопрос отличается от идентифицированного . Очевидно, я вызвал метод "BeginErrorReadLine" (я отмечаю его в коде ниже).
Я хочу разобрать результат, выданный Handle
Командная строка
При запуске в среде командной строки выводится что-то вроде:
> handle64 -p [PID]
Nthandle v4.11 - Ручка просмотра
Copyright (C) 1997-2017 Марк Руссинович
Sysinternals - www.sysinternals.com
10: файл C: \ Windows
1С: Файл C: \ Windows \ SysWOW64
[PID] - любой ID запущенного процесса
Выход отделен.
Первые 5 строк (включая пустые строки) переходят к стандартной ошибке, последние 2 строки - к стандартному выходу.
Так что я могу удалить заголовок, перенаправив:
> handle64 -p [PID] 2> nul
10: файл C: \ Windows
1С: Файл C: \ Windows \ SysWOW64
Приложение Winform
Затем я пытаюсь реализовать эту команду в приложении winform на C #:
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 вести себя так же, как в командной строке?
Обновление
Что касается комментария Дэмиена, я пытаюсь запустить программу через 'cmd', к сожалению, я получаю тот же результат:
var p = Process.Start(new ProcessStartInfo
{
FileName = "cmd",
Arguments = "/C handle64.exe -p [PID]",
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
});
...
В окне вывода:
Вывод =>
Output => Nthandle v4.11 - Ручка просмотра
Вывод => Copyright (C) 1997-2017 Марк Руссинович
Выходные данные => Sysinternals - www.sysinternals.com
Вывод =>
Вывод => 10: Файл C: \ Windows
Вывод => 1С: Файл C: \ Windows \ SysWOW64
Ошибка =>