16

「サブプロセス」(c#System.Diagnostics.Processを介して監視しているブラックボックスプロセスによって内部的に起動されたもの)の出力を取得するのに苦労しています。

私は私の前の投稿の答えによって与えられたアドバイスを受けました: ここ。そして、そこに私が経験したことの詳細を見つけることができます。

この時点で、process1.exeによって生成されたsshプロセスを見つけることができますが、監視しています。これは「すでに実行中のプロセス」であり、C#から直接起動されていないため、出力をC#プログラムにリダイレクトできません。

System.Diagnostics.Processオブジェクトに設定したすべてのプロパティは、c#アプリケーションからそのプロセスを明示的に起動している場合にのみ有効になるようです。他の「管理されていないプロセス」がプロセスを起動した場合、このリダイレクトを設定しても効果はありません。これは、必要なリダイレクトを指定していないものによってプロセスがすでに起動されているためです。

すでに起動されているプロセス(このプロセスが起動される前にリダイレクトを事前に指定する余地がないプログラムによって起動されたプロセス)の出力をリダイレクトする方法はありますか?

4

4 に答える 4

2

これ以上簡単な解決策がないと仮定すると、CreateRemoteThread() を使用して別のプロセスでコードの一部を実行することを試みることができます。ここで説明します。

于 2010-01-19T18:18:38.557 に答える
1

実行中のプロセスから出力を直接リダイレクトする代わりに、プロセス A を意図した宛先に残すときに出力をキャプチャして、新しいプロセスに渡すことができますか?

于 2010-01-19T18:15:57.023 に答える
1

おそらく、このコードを見ることができます。同じ種類のことを行うための解決策を探しているときに見つけました。ただし、実際にはプロセス間ではありませんでした。

それでも解決しない場合は、標準出力をリダイレクトするときに使用されるはずの P/Invoking を参照してくださいSetStdHandleGetStdHandleこれは、リンク先のコード サンプルがリダイレクトを実現するために行っていることだと思います。

:私はこれを見ただけで、実際には正しく動作しませんでした。(コンソールに出力するソースコードにアクセスできたので、より良い解決策を利用できました)

于 2010-01-19T18:45:04.067 に答える