Process.Start(“IEXPLORE.EXE”)在启动后立即触发退出事件..为什么?

我在xp中安装了IE8有一个奇怪的问题。 我试图使用c#中的System.Diagnostics.Process.Start方法启动IE。 我需要捕获IE的退出事件并执行一些操作。 但我最终遇到了一个相当奇怪的问题,IE在发布后会立即触发退出的事件。

这是示例代码

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

大多数朋友回复了我的post,并说为什么你不能只使用URL? 为何坚持使用IE?

这里的原因

该应用程序的最终目的是从Windows应用程序启动URL,并在IE上工作时隐藏exe。 关闭IE后显示exe。

谢谢

最有可能的是你已经将IE作为一个进程运行,所以当你尝试再次作为一个新进程启动时,它看起来已经有IE运行,告诉它用户启动了一个新窗口(所以最初的IE将创建一个“新”窗口而不是新窗口并退出。

可能的解决方案:尝试使用“-nomerge”命令行选项启动该过程:

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

有趣的观察objProcess.ExitCode (至少对于IE8)如果退出将控制权传递给另一个实例将等于0 ,如果它实际上被用户关闭则等于1

如果iexplore.exe的另一个实例已在计算机上运行,​​则新实例将连接到该实例并立即退出。 此外,即使在iexplore未运行的情况下,Internet Explorer 8的多进程体系结构也可能具有父启动子代理进程并立即退出。

但这些答案除了重点之外。 您不应该直接启动Internet Explorer。 如果用户配置了另一个默认浏览器,他们会因为忽略了他们的偏好而感到不快。 相反,你为什么不试试

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

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

也许IEXPLORE本身会为URL启动一个不同的流程并结束您创建的流程? 像Unix上的fork一样?