【问题标题】:Kill Application Process Without Windows Error Reporting在没有 Windows 错误报告的情况下终止应用程序进程
【发布时间】:2013-06-26 23:27:17
【问题描述】:

有什么方法可以完全杀死当前进程并跳过 Windows 错误报告?甚至是一种以更友好的方式处理全局错误的方法,以便不将异常传递给操作系统?

我在本地处理尽可能多的错误,但也有一个全局错误处理程序,它将向我发送一封包含错误详细信息的电子邮件。这是我自定义的错误报告。

我有一个为我的公司构建的 WPF C# 应用程序。它只被少数人使用。

我正在尝试找到一种方法来发出更友好的消息,说明已引发错误并且应用程序必须关闭,发送电子邮件,然后关闭应用程序。但无论我做什么,应用程序仍然冻结并尝试向 Microsoft 报告错误。

【问题讨论】:

  • 请给我们看代码
  • 这是你做事的方式,当你在这里提问时不要保密。它没有太多内容,为 AppDomain.CurrentDomain.UnhandledException 编写一个事件处理程序并允许它返回。报错后调用 Environment.Exit()。
  • 您的解决方案有效,@HansPassant。 Environment.Exit(0);

标签: c# wpf


【解决方案1】:

有时可以,有时不能。

首先,您必须检查是什么异常导致您的应用程序从事件查看器崩溃,并查看您是否可以处理此类异常。 App.DispatcherUnhandledException 和 AppDomain.UnhandledException 事件处理程序可以处理许多异常。

但是某些异常不能被用户捕获,例如 ExecutionEngineException。在这些情况下,您无法防止崩溃并优雅地处理它。

【讨论】:

    【解决方案2】:

    您必须在ApplicationAppDomain 级别添加全局异常处理程序。

    应用程序级处理程序:

    Application.Current.DispatcherUnhandledException += OnDispatcherUnhandledException;
    
    void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs eventArgs)
    {
            // exception handling goes here
    }
    

    AppDomain 级处理程序:

    AppDomain.CurrentDomain.UnhandledException += OnAppDomainUnhandledException;
    
    void OnAppDomainUnhandledException(object sender, UnhandledExceptionEventArgs eventArgs)
    {
    
    }
    

    但是,很少有异常类型(如 StackOverflowException)无法处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2021-06-14
      • 2012-11-13
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多