重定向输出时,控制台窗口不可见

本文关键字:窗口 控制台 输出 重定向 | 更新日期: 2023-09-27 18:18:11

我正在使用来自。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]进程窗口仍然不可见。为什么会这样?我该如何改变这种行为?

重定向输出时,控制台窗口不可见

如果您设置UseShellExecute = true, cmd进程窗口将出现。然而,你需要将redirectstandardput和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();
}

我真的不知道如何修复它,但我知道它为什么会这样。

UseShellExecute=false;

cmd.exeWindows Command Processor,所以用windows shell执行会创建一个新的控制台窗口,它是一个终端,输入由cmd.exe处理,输出直接到终端。

如果你设置了UseShellExecute=true,窗口会显示,但你不能重定向输入和输出,这是因为它的工作方式,正如我在上面段落中描述的

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