【问题标题】:How do I isolate unmanaged code crash in .Net Process如何隔离 .Net Process 中的非托管代码崩溃
【发布时间】:2011-11-18 09:34:02
【问题描述】:

.Net 控制台应用程序依赖于 COM 对象,这些对象往往以非常不可预测的方式不时崩溃。应用程序完全无缘无故地关闭:没有日志,没有异常(catch 块根本不起作用),没有事件日志,没有发生错误。

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

提前感谢您!

【问题讨论】:

  • 不会的,这是本机代码轰炸。您需要将其隔离在自己的进程中。

标签: .net crash isolation


【解决方案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 对象,并在两者之间使用进程间通信。这会将有问题的代码隔离到它自己的进程中,然后您可以根据需要重新启动/使用,而不会杀死您的主进程。

【讨论】:

  • OP 说他没有遇到异常。事实上,他说这种方法根本行不通。重新阅读问题。
  • @Inuyasha OP说catch块根本不起作用,他没有说他是在做catch (exception ex) { }还是只是catch { },他也没有提到是否包装是否启用。如果他遇到不符合 CLS 的异常,其中任何一个都可以解决他的问题。
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多