.NET的 – WindowStyle =隐藏与CreateNoWindow = true?

当我开始一个新的过程时,如果我使用这个过程,会有什么不同?

WindowStyle = hidden 

或者

 CreateNoWindow = true 

ProcessStartInfo类的属性?

正如汉斯所说,WindowStyle是一个传递给stream程的build议,应用程序可以select忽略它。

CreateNoWindow控制控制台如何为subprocess工作,但不能单独工作。

CreateNoWindow与UseShellExecute一起使用,如下所示:

要运行没有任何窗口的过程:

 ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.CreateNoWindow = true; info.UseShellExecute = false; Process processChild = Process.Start(info); 

在它自己的窗口(新控制台)中运行subprocess

 ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.UseShellExecute = true; // which is the default value. Process processChild = Process.Start(info); // separate window 

在父级的控制台窗口中运行subprocess

 ProcessStartInfo info = new ProcessStartInfo(fileName, arg); info.UseShellExecute = false; // causes consoles to share window Process processChild = Process.Start(info); 

CreateNoWindow只适用于控制台模式的应用程序,它不会创build控制台窗口。

WindowStyle仅适用于本机Windows GUI应用程序。 这是一个传递给这个程序的WinMain()入口点的提示。 第四个参数nCmdShow,告诉它如何显示它的主窗口。 这与在桌面快捷方式中显示为“运行”设置相同的提示。 请注意,“隐藏”不是一个选项那里,很less正确devise的Windows程序荣誉该请求。 由于那个窥探用户,他不能得到激活的程序,只能用任务pipe理器杀死它。

使用Reflector,如果UseShellExecute被设置,它看起来像WindowStyle ,否则它使用CreateNoWindow

在MSDN的例子中,你可以看到他们如何设置它:

 // Using CreateNoWindow requires UseShellExecute to be false myProcess.StartInfo.UseShellExecute = false; // You can start any process, HelloWorld is a do-nothing example. myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start(); 

在另一个例子中,因为UseShellExecute默认为true

 // UseShellExecute defaults to true, so use the WindowStyle ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); startInfo.WindowStyle = ProcessWindowStyle.Minimized;