9

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

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

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

我在 Windows 7 x64 上使用 .NET 4.0

4

2 回答 2

17

根据我的经验,每当我启动“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

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

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

于 2014-04-23T14:01:38.130 回答
0

info.CreateNoWindow = true;

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

string ExeName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Curl.exe");
ProcessStartInfo Info = new ProcessStartInfo();
Info.UseShellExecute = false;
Info.FileName = ExeName;
Info.CreateNoWindow = true;
Info.Arguments = 参数;
Info.RedirectStandardOutput = true;
Info.WindowStyle = ProcessWindowStyle.Hidden;
进程 P = Process.Start(Info);
字符串输出 = P.StandardOutput.ReadToEnd();
返回输出;

于 2021-08-26T10:22:01.633 回答