2012-08-13 28 views
3

我有下面的代碼行:Process.Kill()的問題

Process aProcess = Process.Start("ieexplorer", aDummyHTMLFilePath); 
//I do nothing in between 
aProcess.Kill(); 

如果有NO其他IE窗口中打開此運行平穩​​。

但如果有一個窗口打開,我得到一個aProcess.Kill();System.InvalidOperationException

無法處理請求,因爲該進程已退出。

此外,我注意到,在這種情況下,aProcess.HasExited在上面的代碼中緊接着第1行。

即使打開其他IE窗口,我該如何順利關閉IE?

+2

不是IE將URL傳遞給已經運行的實例(如果存在的話),然後退出? – CodeCaster 2012-08-13 08:59:22

+0

@CodeCaster:你說得對。感謝您的評論。 – ViV 2012-08-14 02:04:48

回答

4

當你像你一樣啓動一個新的Internet Explorer實例時,它會嘗試查看Internet Explorer是否已經在運行。如果這是真的,則在已經運行的實例中打開該URL並且新實例立即退出。這意味着當你試圖殺死你開始的過程時,它已經自動退出。但是,您將在屏幕上看到一個新的瀏覽器窗口或選項卡,但該窗口由現有Internet Explorer進程託管。

+0

感謝Gyan! – ViV 2012-08-14 02:02:55

0

我沒有得到同樣的問題,你

我發現,如果進程仍在運行下面的工作或不

Process p = Process.Start("notepad.exe", ""); 
    Thread.Sleep(5000); 
    if (!p.HasExited) p.Kill(); 

它只是抱怨,如果窗口已經關閉。因此,檢查

+0

btw同樣適用於IE .. – BugFinder 2012-08-13 08:58:34

+0

仍然存在競爭條件 - 該過程可能在對HasExited的調用和對Kill的調用之間結束。 – 2013-02-14 03:19:10