2011-02-23 81 views

回答

66

正如漢斯說,WindowStyle是一個傳遞給流程的建議,應用程序可以選擇忽略它。

CreateNoWindow控制控制檯如何爲子進程工作,但它不能單獨工作。

CreateNoWindow協同工作與UseShellExecute如下:

沒有任何窗口中運行的進程:

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

要在自己的窗口中運行的子進程(新的控制檯)

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

在父級控制檯窗口中運行子進程

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

有一件事值得在這裏注意到,我學會了艱難的方法:如果你創建一個進程,然後修改它的StartInfo,你會得到一個不同的行爲,如果你想創建一個ProcessStartInfo然後使用的Process.Start()。具體來說,前者似乎並不尊重CreateNoWindow。 – 2011-05-24 22:04:21

+2

@AriRoth你能給出一個代碼示例嗎?您必須先創建一個流程,然後才能修改其StartInfo。人們總會說process1.StartInfo =某事。因此,您必須先創建流程,然後再將您分配給Process1.StartInfo的ProcessStartInfo實例作爲其他任何操作。 – barlop 2016-04-24 23:50:44

+0

@AriRoth,即使你做'Process process = Process.Start(psi);'而不是'process。開始()'我不確定是否有任何行爲差異,並且您在創建過程之前仍然在設置StartInfo。 – barlop 2016-04-25 01:14:24

16

CreateNoWindow僅適用於控制檯模式的應用程序,它不會創建控制檯窗口。

WindowStyle僅適用於本機Windows GUI應用程序。這是一個傳遞給這樣一個程序的WinMain() entry point的提示。第四個參數nCmdShow,告訴它如何顯示它的主窗口。這與在桌面快捷方式中顯示爲「運行」設置的提示相同。請注意,「隱藏」不是一種選擇,很少有正確設計的Windows程序可以滿足該請求。由於這個窺探用戶,他不能再讓程序被激活,只能用任務管理器殺死它。

11

使用反射器,如果設置了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默認爲真

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

我同意,也同意我的測試。 msdn有反向? https://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle(v=vs.110).aspx他們說:「要使用ProcessWindowStyle.Hidden,ProcessStartInfo.UseShellExecute屬性必須爲false。」 < - 我相信MSDN有它倒退 – barlop 2016-04-25 06:31:10