【发布时间】:2016-08-18 05:47:03
【问题描述】:
我看过这里
我明白了
A) 并非每个程序都尊重它的 CreateNoWindow 请求和
B) 它需要 UseShellExecute=False(默认为 true)。
C) 表示是否创建了一个窗口。 (它永远不会隐藏父窗口)。它说的是是否为子进程创建了一个窗口。 (msdn 说“新窗口”)
D) CreateNoWindow 默认为 false。
我从 cmd 运行它,尽管在 Visual Studio 中单击播放说明了相同的行为。
我将 CreateNoWindow 设置为 false,所以我认为它会为子进程创建一个新窗口。
但事实并非如此。
任务管理器显示 cmd.exe 的第二个实例,但您可以看到仍然只有一个窗口。下面是来自一个窗口的粘贴。它已经在父窗口(一个cmd窗口)中加载了子cmd.exe
如果我将 CreateNoWindow 设置为 true 或 false,那么它似乎没有任何区别。
所以我显然没有让那个 msdn 链接上的示例正常工作。
C:\crp>type aaa.csc
using System.Diagnostics;
class blah{
public static void Main(string[] args) {
Process p = new Process();
ProcessStartInfo psi = new ProcessStartInfo();
psi.UseShellExecute=false;
psi.FileName="cmd.exe";
psi.CreateNoWindow=false;
p.StartInfo=psi;
p.Start();
}
}
C:\crp>csc aaa.csc
Microsoft (R) Visual C# Compiler version 4.0.30319.34209
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.
C:\crp>aaa.exe
C:\crp>Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\crp>
更新
它似乎确实有效。如果您打开 cmd 提示符并运行 exe,则在一种情况下,它会在父级中启动 cmd.exe。在另一种情况下,它会启动一个没有任何窗口的 cmd.exe。不过,视觉工作室中的行为似乎很奇怪,请参阅我对以法莲的回答的评论。在这个问题中,在 Visual Studio 中,我只在项目设置为控制台应用程序的情况下进行了尝试,并且 cmd 提示窗口总是至少会弹出。对于非控制台应用程序,行为要简单得多,例如一个winforms应用程序。
【问题讨论】: