如何在mshtml中捕获应用程序崩溃或退出?

时间:2009-07-15 17:23:32

标签: c++ winapi exception

我们的应用程序使用的是mshtml。由于我们没有在用户的机器上安装更新的浏览器,因为mshtml中众所周知的问题导致我们的应用程序无法正常退出。我们只是使用他们已经拥有的东西。

SetUnhandledExceptionFilter()无法解决此问题,try / catch也无法阻止对mshtml的调用。异常过滤器确实捕获了其他异常。

例外设置为/EHa

当我远程调试崩溃时,我看到:

  

未处理的异常 - 访问冲突

在mshtml中但如果我没有使用调试器附加到进程,则应用程序就会退出。

我们需要做些什么来捕捉异常?


编辑:

这是IE6的旧版本。

2 个答案:

答案 0 :(得分:2)

似乎MSHTML函数将必要的数据传递给单独的线程。该单独的线程处理您的请求并发生异常。这就是为什么你不能通过try / catch块捕获异常的原因。你应该在调试器中检查它。如果这是真的,从其他线程捕获异常的唯一方法是为TerminateThreadTerminateProcess函数设置挂钩。查看Jeffrey Richter为此目的(或其他实现)的CApiHook课程。但它会使您的程序与/NXCOMPAT编译器标志不兼容。

您的第二个选择是安装所有重要的操作系统更新。

答案 1 :(得分:1)

几乎就在那里。它不是SetUnhandledExceptionFilter()而是AddVectoredExceptionHandler你想要的。话虽如此,你可以在这个例外中获得第一枪。

当然,我想知道你之后要做什么。 TerminateThread可能是你唯一的选择,但这可能会使MSHTML陷入僵局。所以这也需要杀人。