错误clr20r3 .NET Windows应用程序Visual Studio 2010

时间:2011-07-29 14:40:15

标签: .net visual-studio-2010 windows-xp

我们有一个使用Visual Studio 2010开发的基于.NET的Windows应用程序。此应用程序是使用.NET Framework 2.0的目标框架构建的。我们将使用.NET 3.5 SP1作为工作平台(先决条件)运送该应用程序。总的来说,这个应用程序与我们的大多数客户一直运行良好。但其中一人目前遇到了问题。应用程序不时遇到致命错误(间歇性地)并被迫关闭而不会抛出任何错误消息,除了“应用程序遇到问题并需要关闭。我们很抱歉给您带来不便。”我们可以获得的唯一信息来自Windows事件查看器。错误详情如下:

来源:.NET Runtime 2.0错误
EventType:clr20r3,
P1:App.exe
P2:6.0.0.0
P3:4dee1ecd
P4:system.windows.forms
P5:2.0.0.0
P6:4889 dee7
P7:16cf
P8:159
P9:system.componentmodel.win32
P10:NIL

当应用程序崩溃时,用户正在执行不同的操作。我们使用Windows XP Professional设置了一个虚拟机,这是我们客户使用的操作系统。在测试环境中,一切都运行良好。我们永远无法复制这个问题。

任何团体都有任何想法或想法?

任何评论都非常感谢。

2 个答案:

答案 0 :(得分:2)

我看到当Windows窗体应用程序遇到消息泵的未处理错误消息时,在事件日志中出现此错误(或者至少有一个与此类似的错误) - 您应该检查以确保您的Main方法和所有后台线程都有try-catch块,(或者您处理UnhandledException事件):

[STAThread]
static void Main()
{
    try
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    catch (Exception ex)
    {
        // Log me
    }
}

请注意,在发布的示例中,通常不会使用上面的catch块,因为这些方法通常不会抛出异常,但是如果您更改了UnhandledExceptionMode或执行了任何可能抛出的操作消息泵之外的例外,这可能会给你你所看到的行为。

答案 1 :(得分:2)

不要依赖Windows日志。相反,你自己的错误;你可以做的是处理应用程序抛出的任何异常,记录它,然后重新启动你的应用程序:
所以在你的主要:

AppDomain.CurrentDomain.UnhandledException += OnCurrentDomain_UnhandledException;

//Add these too if you are in windows forms application
Application.ThreadException += OnApplication_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

然后,如果抛出异常只需记录它,您也可以重新启动应用程序

private static void OnCurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
#if DEBUG
    System.Diagnostics.Debugger.Break();//we will break here if we are in debug mode.
#endif//DEBUG

    LogException(e);//maybe send email to you also.
    RestartTheApplication();    
}