隐藏进程窗口,为什么不工作?

时间:2014-04-23 13:58:00

标签: c# windows console process.start windowless

我现在尝试了几个方法来隐藏新进程的窗口(在这种情况下它只是用于测试的notepad.exe),但无论我尝试什么,它都无法工作。< / p>

我现在读过很多帖子都说同样的,为什么它不适合我呢?

我有一个控制台应用程序应该在不显示窗口的情况下启动其他进程。

我试图让我的控制台应用程序在没有窗口的情况下启动notepad.exe,但它只是不起作用。

ProcessStartInfo info = new ProcessStartInfo("path to notepad.exe");

info.RedirectStandardOutput = true;
info.RedirectStandardError = true;                                
info.CreateNoWindow = true;
info.UseShellExecute = false;                                

Process proc = Process.Start(info);

我也尝试过使用info.WindowStyle的各种设置,我尝试将我的控制台应用程序配置为Windows应用程序,但是我的工作并不重要,子进程总是会打开一个窗口。

这是不允许来自控制台应用程序或这里有什么问题 - 任何人都可以对此有所了解吗?

我在Windows 7 x64上使用.NET 4.0

1 个答案:

答案 0 :(得分:8)

根据我的经验,每当我启动“cmd.exe”时,以下内容都有效。

info.CreateNoWindow = true;
info.UseShellExecute = false;                                

它似乎不适用于“notepad.exe”。它也与其他应用程序失败,例如“excel.exe”和“winword.exe”。

然而,这是有效的:

ProcessStartInfo info = new ProcessStartInfo("notepad.exe");

info.WindowStyle = ProcessWindowStyle.Hidden;

Process proc = Process.Start(info);

来自MSDN

  

窗口可以是可见的,也可以是隐藏的。系统通过不绘制来显示隐藏的窗口。如果窗口被隐藏,则会被有效禁用。隐藏窗口可以处理来自系统或其他窗口的消息,但它无法处理来自用户或显示输出的输入。通常,应用程序可以在自定义窗口外观时隐藏新窗口,然后使窗口样式正常。要使用ProcessWindowStyle.Hidden,ProcessStartInfo.UseShellExecute属性必须为 false

当我测试它时,我不必设置UseShellExecute = false