.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;