调试SHDocVw.InternetExplorer.Quit没有关闭iexplore.exe进程

axk*_*axk 5 debugging mshtml quit

我认为没有明确的答案,所以你如何处理调试这个问题?:

我的主要应用程序(MicroStation插件)使用SHDocVw.InternetExplorer COM包装器启动IE,与其交互,在未使用时隐藏它(例如,当用户关闭窗口并将InternetExplorer.Visible设置为false时拦截).

当主应用程序关闭时,插件通过调用InternetExplorer.Quit来关闭IE,但是iexplore进程仍在运行(在主应用程序关闭时IE被隐藏).

我尝试过的:

  • 调用Quit后调用InternetExplorer对象上的System.Runtime.InteropServices.Marshal.FinalReleaseComObject
  • 在Quit和FinalReleaseComObject之后将对InternetExplorer对象的引用设置为null
  • 在主应用程序退出之前,确保父管理对象获得GC'd(检查是否已调用Finalize)
  • 创建一个测试控制台应用程序并尝试在那里重现问题.例如,当IE处于隐藏状态时尝试调用Quit.(我无法重现问题,IE会在应用程序退出后立即关闭)

有趣的是,我无法重现在同一主应用程序(MicroStation插件)中调用Quit的问题,但主应用程序正在运行时,而不是在退出事件处理代码中.当在其他地方调用时,Quit按预期关闭IE.

否则,InternetExplorer对象对我来说是不透明的.

还有其他方法可以调试此问题吗?

编辑:可能值得注意的是,主应用程序创建UserControl并使IE窗口成为此UserControl的子窗口(使用SetWindowLong更改GWL_STYLE以允许窗口为子窗口,使用SetParent将UserControl设置为父窗口).但是当IE被隐藏时(就在Quit尝试失败时),父窗口被设置为0.

谢谢!