WPF应用程序早期TypeInitializationException捕获

本文关键字:TypeInitializationException 捕获 应用程序 WPF | 更新日期: 2023-09-27 18:10:11

我的团队将一个WPF应用程序分发到一千多台机器上。在99.9%的情况下,应用程序会像预期的那样工作,然而,偶尔我们会从c++中得到一个异常。通常这是一个非常早期的异常。显然,我们无法访问Visual Studio和工具(不过,我可能会提供一些独立的工具)、调试、管理权限等。在这种情况下,我感到完全无法依靠猜测。Windows EventLog并没有多大帮助。Main()方法在生成的代码App.g.i.cs中,我想它是相当标准的。我如何在它周围插入一个try/catch ?它能提供任何线索吗?显然,主要目标是消除或减少猜测。

public static void Main() {
MyProgram.App app = new MyProgram.App();
app.InitializeComponent();
app.Run();

}

Windows事件日志中的异常是这样的:

Application: MyProgram.EXE 

框架版本:v4.0.30319描述:由于未处理的异常,进程被终止。异常信息:System。TypeInitializationException栈:在MyProgram.App.Main ()

故障应用程序名称:MyProgram.EXE,版本:2012.9.4.0,时间戳:0x53628262故障模块名称:KERNELBASE.dll,版本:6.1.7601.18229,时间戳:0x51fb1677异常代码:0xe0434352故障偏移量:0x000000000000940d故障进程id: 0x1b18故障应用程序启动时间:0x01cf8f6f7c57dd1d应用程序路径:c:'WritableFolder'MyProgram.EXE故障模块路径:C:'Windows'system32'KERNELBASE.dll报告编号:baa30260-fb62-11e3-b7d9-a0d3c10c1ecc

谢谢(这不是事件日志消息的一部分)

WPF应用程序早期TypeInitializationException捕获

我不是100%确定,但是您可能能够在AppDomain中捕获异常。UnhandledException事件:

    static void Main()
    {
        AppDomain.CurrentDomain.UnhandledException += OnAppDomainUnhandledException;
        // ... existing code
    }

    private void OnAppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        // Log exception in more detail (note e.IsTerminating for interest)
    }

当这个事件触发时,没有能力再"处理它",但它应该给你机会更详细地记录异常,因为我猜一个InnerException被隐藏在那里。

(很抱歉没有足够的代表来评论Andre的回答)

在app . example .cs中添加UnhandledException处理程序到构造函数

public partial class App
{
    public App()
    {
        AppDomain.CurrentDomain.UnhandledException += OnAppDomainUnhandledException;

和记录异常的方法

private void OnAppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    // Log exception in more detail (note e.IsTerminating for interest)
}
相关文章:
  • 没有找到相关文章