有没有办法'处理'Environment.FailFast?

时间:2012-05-25 15:08:00

标签: .net error-handling

因此,我们的应用程序有一个很好的中央异常处理程序,其中记录了异常的详细信息,向用户显示了通用窗口,并以一种优雅的方式进行了关闭。但是,我们现在有一个第三方组件,不时(并且可能是出于完全正当的理由)调用Environment.FailFast。这使我们的应用程序脱离水面,对我们的用户来说看起来非常糟糕。有没有办法以优雅的方式处理Environment.FailFast?

2 个答案:

答案 0 :(得分:4)

我看不出办法,根据MSDN中的各种条目,这是一个硬终止的过程。您要创建的任何代码都将驻留在该过程中。它也不会运行finally块或任何挂起的终结器,所以我猜测不会提供任何事件或挂钩以允许自定义代码运行。在某种程度上这是有道理的,否则它可能不会“快速”失败,并且它只会在极端过程损坏的情况下使用。

http://msdn.microsoft.com/en-us/library/dd289241

我看到两个三个选项:

  1. 向供应商发送请求以更改代码并移除此电话。
  2. 寻找新供应商。
  3. 正如@RB所建议的那样。将此DLL的使用限制在一个新进程中,以便核心应用程序进程保持安全。我这样做了一次,头疼但是“它有效”。 如果您不能使用建议1或2,我只会建议您这样做!
  4. 来自MSDN:

      

    此方法终止进程而不运行任何活动进程   尝试/终止块或终结器。

         

    FailFast方法将消息字符串写入Windows   应用程序事件日志,然后创建应用程序的转储   终止当前进程。消息字符串也包含在中   向Microsoft报告错误。

         

    使用FailFast方法而不是Exit方法来终止你的   申请状态如果损坏无法修复,   并执行您的应用程序的try / finally块和终结器   将破坏计划资源。

答案 1 :(得分:2)

您可以在新流程中执行第三方代码。

执行此操作的一种简单方法是将第三方代码包装在可执行文件中,而不是使用Process.Start启动它。

请注意,我无法找到FailFast后错误级别的文档。当我测试它时,我得到的值是-2146232797 ...