【发布时间】:2011-11-18 09:34:02
【问题描述】:
.Net 控制台应用程序依赖于 COM 对象,这些对象往往以非常不可预测的方式不时崩溃。应用程序完全无缘无故地关闭:没有日志,没有异常(catch 块根本不起作用),没有事件日志,没有发生错误。
如何隔离原生崩溃? AppDomain 方法会救我吗?
提前感谢您!
【问题讨论】:
-
不会的,这是本机代码轰炸。您需要将其隔离在自己的进程中。
.Net 控制台应用程序依赖于 COM 对象,这些对象往往以非常不可预测的方式不时崩溃。应用程序完全无缘无故地关闭:没有日志,没有异常(catch 块根本不起作用),没有事件日志,没有发生错误。
如何隔离原生崩溃? AppDomain 方法会救我吗?
提前感谢您!
【问题讨论】:
你试过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 对象,并在两者之间使用进程间通信。这会将有问题的代码隔离到它自己的进程中,然后您可以根据需要重新启动/使用,而不会杀死您的主进程。
【讨论】:
catch块根本不起作用,他没有说他是在做catch (exception ex) { }还是只是catch { },他也没有提到是否包装是否启用。如果他遇到不符合 CLS 的异常,其中任何一个都可以解决他的问题。