1

私の Windows MFC アプリケーションには、Web アプリケーションをホストする埋め込み WebBrowser コントロールがあり、ユーザーが javascript window.open() 呼び出しを介してポップアップを表示するリンクをクリックすると、iexplorer.exe が起動されてポップアップ ウィンドウが表示されます。 .

このポップアップ ウィンドウを閉じると、iexplore.exe はシャットダウンしますが、シャットダウンに非常に時間がかかるため、ユーザーがリンクをクリックしてポップアップを再度起動すると、JavaScript エラーが表示されます。

「システムのシャットダウンは既にスケジュールされています」 - これはシャットダウンに関する一般的な COM エラー メッセージだと思います。

私のテストでは、Internet Explorer 11 プロセス iexplore.exe が終了するまでに最大 15 秒かかることを確認しました。対照的に、Internet Explorer 8 はほぼ瞬時に終了します。

これは、Internet Explorer 11 を起動し、taskmgr.exe を開いて、起動された 2 つの iexplore.exe プロセスを表示することで簡単に確認できます。1 つは 64 ビットのホスト プロセスで、もう 1 つはタブのコンテンツをホストする 32 ビットのプロセスです。Internet Explorer ウィンドウを閉じると、32 ビット プロセスはすぐに終了しますが、64 ビット ホスト プロセスは数秒間残ります。

このエラーは、iexplore.exe がシャットダウン中の場合にのみ発生します。次の場合は発生しません。

  • ユーザーはiexplore.exeが終了するのを待ちます
  • タスク マネージャーを使用して iexplorer.exe を強制終了します。
  • または、Internet Explorer ウィンドウが既に開いていることを確認して、ポップアップが閉じても iexplore.exe がまだウィンドウを表示しているため終了しないようにします。

誰にもアイデアはありますか?

4

1 に答える 1

2

次の 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 に答える