Если я знаю идентификатор процесса, есть ли какой-то механизм в .net (или pinvoke в качестве крайней меры) для захвата / перенаправления стандартного вывода процесса, который я не запустил?
Вы можете AttachConsole вашего процесса к консоли другого процесса, а затем использовать обычные консольные функции ввода-вывода для чтения и записи из него.
Не забудьте использовать FreeConsole , чтобы сначала отсоединиться от текущей консоли процесса.
РЕДАКТИРОВАТЬ : Похоже, что это действительно не работает, на что указывает другой ответ в этой теме.
Я лично не пробовал это, но, кажется, с тех пор, как был принят ответ, что это работает.
Насколько я знаю, вы не можете сделать это в .NET, вы можете перенаправить выходные данные для процессов, которые вы запускаете только через ProcessStartInfo Class .
Кроме того, насколько я знаю, вы вообще не можете перенаправить ввод / вывод после запуска процесса, это может сделать только сам процесс.
Вы можете присоединить вызывающий процесс к консоли указанного процесса через Функция AttachConsole .