我有一个DLL被注入到非常老的,错误的,现在它的开发人员应用程序不支持。有时该应用程序崩溃,我需要一些方法来捕获所有未处理的异常(来自DLL)可能会发生以保存数据,然后才允许应用程序崩溃。我怎样才能做到这一点?
目前,有一个外部调试器用于此目的,但它太慢而且还有错误以保持这种方式。
答案 0 :(得分:10)
您必须启动一个托管DLL的新进程。如果DLL将崩溃,无论你喜欢与否,它都会打倒这个过程。当然,您可以尝试捕获异常或类似的东西,但如果抛出异常,则意味着内存已损坏。 It is better to crash catastrophically than to have the program continuing to run in an inconsistent state.
Windows shell是一个实际执行此操作的程序 - 它在代理进程中启动一些插件,因此如果插件崩溃,则不会导致整个shell崩溃。您需要使用进程间通信来自行与您开始的代理进行通信。