.Net控制台应用程序依赖于COM对象,这些对象往往以非常不可预测的方式崩溃。应用程序根本没有任何理由关闭:没有日志,没有例外(catch
块根本不起作用),没有事件日志,没有发生错误。
如何隔离原生崩溃? AppDomain方法会救我吗?
提前谢谢!
答案 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对象,并使用两者之间的进程间通信。这会将有问题的代码隔离到它自己的进程中,然后您可以根据需要重新启动/使用它,而不会使主进程被终止。