2009-10-14 26 views
3

當使用.NET的Process.Start來運行IE8的iexplore.exe,並且如果您已經打開了另一個IE8窗口,那麼您剛啓動的iexplore.exe進程將立即退出,並且其子進程將附加到主IE8處理。這樣做的結果是你的Process對象將被鏈接到已經退出的「調用者」進程,但不是正在運行的子進程。任何你想對Process對象做的事情都會導致InvalidOperationException異常告訴你進程已經退出。如何獲取新創建的IE8窗口的過程?

如何獲取鏈接到實際的子IE8過程的過程對象?

回答

1

我做到了使用非最佳解決方案 - 運行iexplore.exe的我之前得到的所有iexplore.exe進程ID的列表,然後再拿到相同的列表被調用後的iexplore.exe。做兩個列表之間的差異,額外的PID將是我創建的。這當然在某些情況下不起作用(其他應用程序或用戶在檢測代碼運行時啓動了額外的iexplore.exe進程,或者IE做了某種重新佈置/重新創建進程作爲內部維護任務)。

+0

其實我並沒有真正做到這一點。我真正想要的是Hwnd不是PID(用於控制這個IE)。所以我在調用之前和之後得到了IE的Hwnd列表,以查找新創建的窗口。 – Jack 2009-10-19 22:07:33

4

正如你可能需要強制IE啓動一個新的實例(通過-nomerge命令行參數)解決方法:

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