c# - 重定向输出时控制台窗口不可见

标签 c# .net console console-application

我正在使用 .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 进程窗口将会出现。但是,您需要将 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();
}

关于c# - 重定向输出时控制台窗口不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093366/

相关文章:

c# - 如何分配可变数量的输入?

.net - 在设计 View 属性网格中禁用属性

c# - 如何在Asp.net和C#中将GridView数据导出到pdf文件?

.net - Nuget/SemVer - 添加新依赖项但不更改公共(public) API 时,我应该如何增加我的版本号?

c# - 在 C# 中部署控制台应用程序的方法

f# - 从 F# 中的控制台读取

c# - OData - 如何扩展基本实体的导航属性

C#访问类内部静态

c++ - 如何在 while(1) 内部工作时安全退出 C++ 控制台应用程序

c# - 我如何(优雅地)从内部关闭工作人员服务?