С#: перенаправление стандартного вывода процесса, который уже запущен

Мне было трудно получить вывод "подпроцесса" (один из которых был запущен внутри процесса Blackbox, который я контролирую с помощью С# System.Diagnostics.Process)

Я принял совет, приведенный в ответе моего предыдущего сообщения: здесь. И там вы можете найти детали того, что я пережил.

На этом этапе, хотя я могу найти процесс ssh, созданный process1.exe, я отслеживаю. Я не могу перенаправить вывод в свою программу С#, потому что это "уже запущенный процесс" и не запускался непосредственно с С#.

Кажется, что все свойства, которые вы установили в объекте System.Diagnostics.Process, вступают в силу только в том случае, если вы явно запускаете этот процесс из своего приложения С#; если какой-то другой "неуправляемый процесс" запустил этот процесс, установка этого перенаправления не имеет никакого эффекта, потому что процесс уже запущен тем, что не указывает перенаправление, в котором я нуждаюсь.

Можно ли перенаправить вывод процесса, который уже был запущен (процесс, запущенный программой, для которой у меня нет возможности предварительно указать перенаправление до запуска этого процесса)?

Ответ 1

Предполагая, что нет более простого решения, вы можете попытаться запустить фрагмент кода в другом процессе через CreateRemoteThread(), объясненный здесь.

Ответ 2

Вместо того, чтобы перенаправлять вывод непосредственно из текущего процесса, можете ли вы отобразить вывод, когда он покидает процесс A в назначенном месте назначения, передает его в ваш новый процесс?

Ответ 3

Возможно, вы можете посмотреть этот код. Я нашел это, когда искал решение, чтобы сделать то же самое; однако это не был действительно межпроцессный процесс.

Если это не поможет, вы можете посмотреть P/Invoking SetStdHandle и GetStdHandle, которые должны использоваться при перенаправлении стандартного вывода. Я думаю, что это то, что связано с образцом кода, чтобы сделать перенаправление.

Примечание: Я просто посмотрел на этот материал и на самом деле не смог его нормально работать. (У меня было лучшее решение для меня, потому что у меня был доступ к исходному коду, выводимому на консоль)

Ответ 4

У меня такая же головоломка. Это не вариант для вызова чего-либо внутреннего в подчиненном процессе. Он уже работает, какой код не поддается контролю. Но я знаю, что он выплевывает стандартный вывод, который я хочу отслеживать, обрабатывать и т.д. Одно дело, что я запускаю процесс, я могу настроить перенаправление, но в этом случае процесс будет запущен во-вторых, к моему старту первичный подчиненный процесс. Поэтому у меня нет такого варианта. Я не нашел способ для.NET Process работать в этих условиях. Возможно, есть и другой способ, может быть, C++ - это путь сюда? Это было бы предельно приемлемым, но я хотел бы подойти к нему с точки зрения.NET С#, если это возможно.