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 Command Processor使用 windows shell 执行会创建新的控制台窗口,它是终端,其输入由 cmd.exe 处理,输出被定向到终端。

如果您设置UseShellExecute=true窗口将显示,但您将无法重定向输入和输出,这是因为它的工作方式如我在上面段落中描述的那样

编辑:最重要的部分:你写了“进程窗口”;控制台类型进程根本没有窗口

于 2013-06-13T17:53:16.183 回答
2

如果你设置UseShellExecute = true了 cmd 进程窗口将会出现。但是,您需要将 RedirectStandardInput 和 RedirectStandardpOutput 设置为“false”(或将它们注释掉)。

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 = true;
    process.StartInfo.CreateNoWindow = false;
    process.EnableRaisingEvents = true;
    process.Start();

    process.OutputDataReceived += null;

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

    process.OutputDataReceived -= null;
    process.CloseMainWindow();
    process.Close();
}
于 2013-06-13T17:43:36.447 回答