私はWinFormsアプリケーションを持っています。そのアプリケーションの中で私は新しいプロセスを開始しています。この特定のプロセス(winformsアプリケーション全体ではありません)の出力をコンソールにリダイレクトする必要があります。 ネイティブメソッドAllocConsole()
はWinFormsアプリケーション全体の制御を引き継ぎ、コンソールを閉じるとGUIフォームも閉じてしまうため、私にとっては十分ではありません。リダイレクトされたプロセス出力を開始し、C#のコンソールに出力します。
私は を使用して、出力を私が始めているプロセスのコンソールにリダイレクトしようとしましたが、なぜ動作していないのかわかりません。
他の場所にAttachConsole
を置くことはできません。なぜなら、プロセスIDはプロセスの実行開始後に取得できるからです。
提案がありますか?
P.S.私はそれをやっています。なぜなら、アウトプットを使って物事をし、それをユーザーに "生きて"プリントしているからです。私がここに書いたものとは関係のない他の提案があれば、聞いてうれしいです。カスタムトレースリスナを実装する必要が
おかげ
public static void RedirectOutput(string program, string parameters)
{
Process process = new Process();
process.StartInfo.FileName = program;
process.StartInfo.Arguments = parameters;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.OutputDataReceived += new DataReceivedEventHandler(OutputConsoleHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(OutputConsoleHandler);
process.Start();
AttachConsole(process.Id);
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
public static void OutputConsoleHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
Console.WriteLine(outLine.Data);
}
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
WinFormを使用しているのと同じように、 – Tommy
@ Tommy元の出力はコンソールに出力されます。私は出力を取ってそれを使って操作する必要がありますが、何も起こらないのでユーザーに出力を見させる必要があります – user3364652