2010-01-19 3 views
11

Мне нелегко получить вывод «подпроцесса» (один из которых запускается внутри процесса Blackbox, который я контролирую с помощью системы C#. Diagnostics.Process)C#: перенаправление стандартного вывода процесса, который уже запущен

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

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

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

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

ответ

1

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

+0

Как это возможно? Я уже перенаправляю весь вывод из файла process1.exe в мое приложение C#. В тот момент, когда process1 запускает ssh.exe (process2), я получаю еще 3 строки вывода из process1, а затем весь вывод прекращается, потому что process2 - единственное, что выводит (я подозреваю), и я не могу перенаправить процесс2 вывод, потому что он запускается внутренне процессом process1 (для которого я не могу управлять перенаправлением). –

2

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

1

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

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

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

+0

Пока не полностью протестирован (или действительно работает AFAIR): http://pastebin.com/m13ab7101 Это то, что я разработал на основе материала 'SetStdHandle'. НТН! – cmw

Смежные вопросы