如何在.Net Process中隔离非托管代码崩溃

时间:2011-11-18 09:34:02

标签: .net crash isolation

.Net控制台应用程序依赖于COM对象,这些对象往往以非常不可预测的方式崩溃。应用程序根本没有任何理由关闭:没有日志,没有例外(catch块根本不起作用),没有事件日志,没有发生错误。

如何隔离原生崩溃? AppDomain方法会救我吗?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试过RuntimeCompatibilityAttribute.WrapNonExceptionThrows

或者,没有类型的catch块应该捕获non CLS-compliant exceptions,即:

try
{
    // Code here.
    // Maybe a COM call here.
}
catch(Exception ex)
{
    // Managed exceptions.
}
catch
{
    // non CLS-compliant exceptions.
}

使用单独的AppDomain很可能无法正常工作,具体取决于您的应用程序首先被unhandled exceptions will still kill the entire process作为目标而被杀死,并且当前您的异常未处理,因为您没有抓住它。

或者,您可以在单独的进程中使用COM对象,并使用两者之间的进程间通信。这会将有问题的代码隔离到它自己的进程中,然后您可以根据需要重新启动/使用它,而不会使主进程被终止。