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

Aid*_*dal 6 c# windows console process.start windowless

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

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

我有一个控制台应用程序,应该启动其他进程而不显示他们的窗口.

我试图让我的控制台应用程序启动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);
Run Code Online (Sandbox Code Playgroud)

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

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

我在Windows 7 x64上使用.NET 4.0

Gra*_*ICA 9

根据我的经验,每当我启动"cmd.exe"时,以下工作.

info.CreateNoWindow = true;
info.UseShellExecute = false;                                
Run Code Online (Sandbox Code Playgroud)

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

但这有效:

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

info.WindowStyle = ProcessWindowStyle.Hidden;

Process proc = Process.Start(info);
Run Code Online (Sandbox Code Playgroud)

来自MSDN:

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

当我测试它时,我没有必要设置UseShellExecute = false.

  • MSDN 文档已更正为“要使用 Hidden,UseShellExecute 属性必须为 *true*”。UseShellExecute 默认为 true。 (2认同)