隐藏流程窗口,为什么不隐藏';它不起作用

本文关键字:隐藏 不起作用 为什么不 程窗口 窗口 | 更新日期: 2023-09-27 17:59:53

我现在已经尝试了几种方法来隐藏新进程的窗口(在这种情况下,它只是用于测试的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);

我也尝试过使用各种设置来获取信息。WindowStyle和我曾尝试将我的控制台应用程序配置为Windows应用程序,但我做什么并不重要,子进程总是打开一个窗口。

控制台应用程序不允许这样做吗?或者这里的问题是什么?也许有人能对此有所了解吗?

我在Windows 7 x64 上使用.NET 4.0

隐藏流程窗口,为什么不隐藏';它不起作用

根据我的经验,每当我启动"cmd.exe"时,以下内容都会起作用。

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

它似乎不适用于"notepad.exe"。它也适用于其他应用程序,如"excel.exe"answers"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

info.CreateNoWindow=true;

上面的行将阻止在c#
中显示我使用以下代码在后台运行exe,并读取exe的输出:

string ExeName=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Curl.exe")
ProcessStartInfo Info=新的ProcessStartInfo()
Info.UseShellExecute=false
Info.FileName=ExeName
Info.CreateNoWindow=true
Info.Arguments=参数
Info.RedirectStandardOutput=true
Info.WindowStyle=处理窗口样式。隐藏
Process P=Process.Start(信息)
string OutPut=P.StandardOutput.ReadToEnd()
return OutPut