2009-12-01 163 views
9

我有一個奇怪的問題與安裝在XP中的IE8。我試圖在C#中使用System.Diagnostics.Process.Start方法啓動IE。我有一個要求來捕獲IE的退出事件並做一些操作。但是我最終遇到了一個很奇怪的問題,那就是IE在發佈後立即啓動退出的事件。Process.Start(「IEXPLORE.EXE」)在啓動後立即啓動Exited事件。爲什麼?

這是示例代碼

 Process objProcess = Process.Start("IEXPLORE.EXE", "http://google.com"); 

    if (objProcess != null) 
    { 
     objProcess.EnableRaisingEvents = true; 
     objProcess.Exited += new EventHandler(myProcess_Exited);   
    } 

    public static void myProcess_Exited(object sender, System.EventArgs e) 
    { 
     MessageBox.Show("You exited"); 
    } 

但上面的代碼laucnching不同處理時完全運作(例如:記事本)時和關閉該exe它觸發的退出事件。

這隻會給問題啓動IE 8。有人可以澄清我是什麼問題?

UPDATE

多數朋友說我的文章,說你爲什麼不能只使用一個網址?爲什麼堅持使用IE?

這裏的原因

應用程序的最終目的是從Windows應用程序啓動一個URL,並在IE工作時,將隱藏的exe文件。並關閉IE後顯示exe。

感謝

+0

在我的系統上(XP SP 3,.NET Framework 3.5,IE 8),這段代碼沒有任何問題。也許你有權限問題? – Jehof 2009-12-01 09:54:02

+0

你試過用其他IE窗口已經打開嗎? – RameshVel 2009-12-01 10:03:55

+1

請注意,具有不同默認瀏覽器的用戶不會意識到您打開IE。您可以嘗試將URL傳遞給'Process.Start',但確保設置了UseShellExecute。當然,這確實複雜檢查瀏覽器是否退出... – Thomas 2009-12-01 10:11:53

回答

18

最有可能的是,你有IE瀏覽器已經在運行的過程中,因此,當您嘗試再次啓動它作爲一個新的進程,它看起來有IE運行已,告訴它用戶啓動一個新窗口(所以最初的IE將創建一個「新窗口」而不是一個新窗口)並退出。

可能的解決方案: 嘗試從開始 「-nomerge」 命令行選項的過程:

Process objProcess = Process.Start("IEXPLORE.EXE", "-nomerge http://google.com/"); 

有趣的觀察objProcess.ExitCode(對於IE8至少)將等於0如果退出通過控制到另一個實例,並且如果它實際上由用戶關閉,則返回1

+0

非常感謝麗晶的回覆。您的方法允許我在關閉時處理IE出口。但現在的網址是完全混亂,並顯示像這樣的「http:/// new%20http://google.com/」 ,而不是加載預期的文檔... – RameshVel 2009-12-01 10:44:16

+0

嘗試「-new http:// google。請/。 – Regent 2009-12-01 10:51:17

+0

啓動URL。但沒有按預期工作:(這導致默認行爲)(發射後退出) – RameshVel 2009-12-01 10:54:27

1

也許IEXPLORE本身會啓動一個不同的過程,URL和結束進程時創建?像Unix上的fork一樣?

+0

這也引起了我的想法...... iexplore.exe實際上是踢別的東西或爲主程序創建另一個進程。 – Bobby 2009-12-01 10:12:57

3

如果iexplore.exe的另一個實例已經在機器上運行,新的實例將連接到並立即退出。此外,即使在iexplore未運行的情況下,Internet Explorer 8的multiprocess architecture也可能具有父啓動子代理程序進程並立即退出。

但是,這些答案是重點。您不應該直接啓動Internet Explorer。如果用戶配置了另一個默認瀏覽器,他們會不高興你忽略了他們的偏好。相反,你爲什麼不嘗試

System.Diagnostics.Process.Start("http://google.com"); 

直接,這將做正確的事情。您將無法分辨瀏覽器何時關閉,但如果該命令已在現有瀏覽器會話中打開新選項卡,則瀏覽器關閉事件對您的應用程序將沒有意義。

相關問題