1

我的 windows MFC 应用程序有一个嵌入的 WebBrowser 控件,它承载一个 Web 应用程序,当用户单击通过 javascript window.open() 调用显示弹出窗口的链接时,它会导致 iexplorer.exe 启动以显示弹出窗口.

当此弹出窗口关闭时,iexplore.exe 将关闭,但是关闭需要很长时间,如果用户单击链接再次启动弹出窗口,则会显示 javascript 错误:

“已安排系统关闭”,-我认为这是与关闭有关的通用 COM 错误消息。

在我的测试中,我观察到 Internet Explorer 11 进程 iexplore.exe 最多需要 15 秒才能退出。相比之下,Internet Explorer 8 几乎立即退出。

这可以通过启动 Internet Explorer 11 并打开 taskmgr.exe 以查看启动的两个 iexplore.exe 进程来轻松验证。一个是 64 位主机进程,另一个是托管选项卡内容的 32 位进程。当 Internet Explorer 窗口关闭时,32 位进程会立即退出,但 64 位主机进程会停留几秒钟。

仅当 iexplore.exe 正在关闭时才会出现此错误。如果出现以下情况,则不会发生:

  • 用户等待 iexplore.exe 终止
  • 使用任务管理器杀死 iexplorer.exe
  • 或者确保已经打开了一个 Internet Explorer 窗口,以便在弹出窗口关闭时 iexplore.exe 不会终止,因为它仍在显示一个窗口。

有没有人有任何想法?

4

1 回答 1

2

这两个注册表项:

[HKLM\Software\Microsoft\Internet Explorer\Main\FrameShutdownDelay]
[HKLM\Software\Policies\Microsoft\Internet Explorer\Main\FrameShutdownDelay]

值为 DWORD 1 似乎停止 32 位选项卡进程退出 1 分钟,此时 64 位帧主机进程也退出 - 这解决了我们的问题。

但是,这个密钥是无证的,我只是通过在 iexplore.exe 进程上运行 procmon.exe 才发现它的。

我将不胜感激对此密钥的目的和预期用途的任何解释。

于 2016-02-01T01:14:31.550 回答