2009-12-01 162 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"); 

直接,这将做正确的事情。您将无法分辨浏览器何时关闭,但如果该命令已在现有浏览器会话中打开新选项卡,则浏览器关闭事件对您的应用程序将没有意义。

相关问题