如何隐藏控制台运行C#控制台应用程序

160

有没有一种方法可以在执行控制台应用程序时隐藏控制台窗口?

我目前正在使用 Windows Forms 应用程序启动控制台进程,但我不希望在任务运行时显示控制台窗口。


尝试从计划任务中运行控制台应用程序。 - user2822353
这回答您的问题吗?显示/隐藏C#控制台应用程序的控制台窗口 - StayOnTarget
13个回答

1
虽然此处的其他答案已经提到您可以将“输出类型”更改为“Windows应用程序”,但请注意,这意味着您将无法使用Console.In,因为它将变成一个NullStreamReader。 Console.OutConsole.Error似乎仍然可以正常工作。

2
你是认真的吗?既然没有控制台可以输入内容,为什么还要使用“Console.In”呢?任何可以通过“Console.In”访问的内容应该从哪里来呢?这根本就没有任何意义。换句话说:在这种情况下,“Console.In”是一个“NullStreamReader”,这是完全明显和合乎逻辑的。 - Robert S.
2
@RobertS。可能是一个管道。也就是另一个程序的输出。当我发现这个问题时,正是我的使用情况。 - kjbartel

1

我知道我没有完全回答你想问的问题,但是我在想你是否正在问正确的问题。

为什么不使用以下任一选项:

  1. Windows服务
  2. 创建一个新线程并在其中运行您的进程

如果你只是想运行一个进程,那些听起来像更好的选择。


3
有许多情况下启动一个实用的控制台应用程序是完全合法的。 - Adam Robinson
在我的情况下,由于我所工作的软件使用客户端/服务器模型,因此需要一个单独的进程。 - Aaron Thomas
创建新线程并不总是解决问题的方法。有时候,你只是不想要那个烦人的窗口在后台出现。而且,如果你在循环中使用了 process.start,那么当控制台窗口弹出时,你将无法完成任何工作。 - user890332
1
我从任务计划程序中启动无窗口实用程序控制台应用程序。无需服务,也没有父进程可从中派生线程。如果需要其他输出,这些应用程序将写入EventLog。 - subsci

0

只需写

ProcessStartInfo psi= new ProcessStartInfo("cmd.exe");
......

psi.CreateNoWindow = true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接