4

.NET 4 コンソール アプリケーションから次のコードを使用しています。

private static void AttachToConsole ()
{
    System.Diagnostics.Process process = null;

    process = new Process();
    process.StartInfo.FileName = "cmd.exe";
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = false;
    process.EnableRaisingEvents = true;
    process.Start();

    process.OutputDataReceived += new DataReceivedEventHandler(Process_OutputDataReceived);

    Console.Write("Press any key to continue...");
    Console.ReadKey();

    process.OutputDataReceived -= new DataReceivedEventHandler(Process_OutputDataReceived);
    process.CloseMainWindow();
    process.Close();
}

実行すると、アプリ自体のコンソール ウィンドウのみが表示されますが、[cmd.exe]プロセス ウィンドウは非表示のままです。その理由と、この動作を変更するにはどうすればよいですか?

4

2 に答える 2

2

修正方法はよくわかりませんが、なぜそのように機能するのかはわかっています。

あなたが設定した

UseShellExecute=false;

cmd.exeWindowsシェルで実行するとWindows Command Processor、入力がcmd.exeによって処理され、出力が端末に送られる端末である新しいコンソールウィンドウが作成されます。

設定UseShellExecute=trueするとウィンドウは表示されますが、入力と出力をリダイレクトすることはできません。これは、上記の段落で説明したように動作するためです。

EDIT:最も重要な部分:「プロセスウィンドウ」を書きました。コンソールタイプのプロセスにはウィンドウがまったくありません

于 2013-06-13T17:53:16.183 に答える