Отладка SHDocVw.InternetExplorer.Quit не закрывает процесс iexplore.exe - PullRequest
5 голосов
/ 16 августа 2011

Я думаю, что нет однозначного ответа, так как бы вы подошли к устранению этой проблемы?:

Мое основное приложение (плагин MicroStation) запускает IE, используя оболочку COM SHDocVw.InternetExplorer, взаимодействует с ним, скрывает его, когда оно не используется (например, перехватывает, когда пользователь закрывает окно, и устанавливает InternetExplorer.Visible в false).

Когда основное приложение закрывается, плагин закрывает IE, вызывая InternetExplorer.Quit, но процесс iexplore остается запущенным (IE скрыт в момент закрытия основного приложения).

Что я пробовал:

  • Вызов System.Runtime.InteropServices.Marshal.FinalReleaseComObject для объекта InternetExplorer после вызова Quit
  • Установка ссылки на объект InternetExplorer на нуль после Quit и FinalReleaseComObject
  • Проверка того, что родительские управляемые объекты получают GC'd (проверка вызова Finalize) до выхода из основного приложения
  • Создание тестового консольного приложения и попытка воспроизвести проблему там. Например. пытается вызвать Quit, когда IE находится в скрытом состоянии. (Я не смог воспроизвести проблему, IE закрывается, как только приложение выходит)

Что также интересно, я не смог воспроизвести проблему вызова Quit в том же основном приложении (плагин MicroStation), но во время работы основного приложения, а не в коде обработки событий выхода. При вызове в другом месте Quit закрывает IE, как и ожидалось.

В противном случае объект InternetExplorer для меня непрозрачен.

Есть ли другие способы устранения этой проблемы?

Редактировать: Возможно, стоит отметить, что основное приложение создает UserControl и делает окно IE дочерним по отношению к этому UserControl (используя SetWindowLong, чтобы изменить GWL_STYLE, чтобы позволить окну быть дочерним, и SetParent установить UserControl в качестве родителя). Но когда IE скрыт (что происходит при неудачной попытке выхода), родительское окно устанавливается на 0.

Спасибо!

...