我们的应用程序使用的是mshtml。由于我们没有在用户的机器上安装更新的浏览器,因为mshtml中众所周知的问题导致我们的应用程序无法正常退出。我们只是使用他们已经拥有的东西。
SetUnhandledExceptionFilter()
无法解决此问题,try
/ catch
也无法阻止对mshtml的调用。异常过滤器确实捕获了其他异常。
例外设置为/EHa
。
当我远程调试崩溃时,我看到:
未处理的异常 - 访问冲突
在mshtml中但如果我没有使用调试器附加到进程,则应用程序就会退出。
我们需要做些什么来捕捉异常?
这是IE6的旧版本。
答案 0 :(得分:2)
似乎MSHTML函数将必要的数据传递给单独的线程。该单独的线程处理您的请求并发生异常。这就是为什么你不能通过try / catch块捕获异常的原因。你应该在调试器中检查它。如果这是真的,从其他线程捕获异常的唯一方法是为TerminateThread
和TerminateProcess
函数设置挂钩。查看Jeffrey Richter为此目的(或其他实现)的CApiHook
课程。但它会使您的程序与/NXCOMPAT
编译器标志不兼容。
您的第二个选择是安装所有重要的操作系统更新。
答案 1 :(得分:1)
几乎就在那里。它不是SetUnhandledExceptionFilter()
而是AddVectoredExceptionHandler
你想要的。话虽如此,你可以在这个例外中获得第一枪。
当然,我想知道你之后要做什么。 TerminateThread可能是你唯一的选择,但这可能会使MSHTML陷入僵局。所以这也需要杀人。