繁体   English   中英

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

[英]Process.Start(“IEXPLORE.EXE”) immediately fires the Exited event after launch.. why?

我在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

大多数朋友回复了我的帖子,并说为什么你不能只使用一个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一样?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM