相关疑难解决方法(0)

优雅地处理损坏的状态异常

此问题相关,我想强制CLR让我的.NET 4.5.2应用程序捕获损坏的状态异常,其唯一目的是记录它们然后终止应用程序.如果我catch (Exception ex)在应用程序周围的几个地方,这样做的正确方法是什么?

因此,在我指定<legacyCorruptedStateExceptionsPolicy>属性后,如果我理解正确,所有catch (Exception ex)处理程序将捕获异常,AccessViolationException并愉快地继续.

是的,我知道catch (Exception ex)是一个坏主意™,但如果CLR至少将正确的堆栈跟踪放入事件日志中,我将非常乐意向客户解释他的服务器应用程序在凌晨1点快速失败并且离线晚上是件好事.但不幸的是,CLR将一个不相关的异常记录到事件日志中,然后关闭该过程,以便我无法找出实际发生的情况.

问题是,如何实现这一目标,流程广泛:

if the exception thrown is a Corrupted State Exception:
    - write the message to the log file
    - end the process 
Run Code Online (Sandbox Code Playgroud)

(更新)

换句话说,这可能适用于简单应用中的大多数例外:

[HandleProcessCorruptedStateExceptions] 
[SecurityCritical]
static void Main() // main entry point
{
    try 
    {

    }
    catch (Exception ex)
    {
        // this will catch CSEs
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它不适用于:

  • 未处理的应用程序域异常(即在非前台线程上抛出)
  • Windows服务应用程序(没有实际Main入口点)

所以这似乎<legacyCorruptedStateExceptionsPolicy>是使这项工作成功的唯一方法,在这种情况下,我不知道在记录CSE后如何失败?

.net c# access-violation fail-fast corrupted-state-exception

23
推荐指数
2
解决办法
6837
查看次数