2016-06-21 50 views
0

私は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); 
+0

WinFormを使用しているのと同じように、 – Tommy

+0

@ Tommy元の出力はコンソールに出力されます。私は出力を取ってそれを使って操作する必要がありますが、何も起こらないのでユーザーに出力を見させる必要があります – user3364652

答えて

0

。このクラスの内部ではコンソールウィンドウが生成され、Write/Write Lineメソッドではウィンドウにコンテンツを印刷することができます

関連する問題