WPF app早期的TypeInitializationException catch

时间:2014-06-25 14:42:34

标签: c# c++ wpf

我的团队将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

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

2 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但您可以在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被隐藏在那里。

答案 1 :(得分:0)

(对于安德烈的回答尚不足以回答评论)

在App.xaml.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)
}