C# 如何捕获未捕获的异常?视窗7

C# 如何捕获未捕获的异常?视窗7,c#,.net,exception,windows-7,C#,.net,Exception,Windows 7,我的程序在Windows XP中运行,但在Windows 7中毫无例外地崩溃。试抓不起作用。我还尝试了application.unhandledexception,但没有成功。然后我尝试签入windows管理并获得以下日志: Level Date and Time Source Event ID Task Category Error 7/25/2011 11:25:14 AM Application Error 1000 (100) "Faulting

我的程序在Windows XP中运行,但在Windows 7中毫无例外地崩溃。试抓不起作用。我还尝试了application.unhandledexception,但没有成功。然后我尝试签入windows管理并获得以下日志:

Level   Date and Time   Source  Event ID    Task Category

Error   7/25/2011 11:25:14 AM   Application Error   1000    (100)   "Faulting application name: myApp.exe, version: 1.0.0.0, time stamp: 0x4e2ce191

Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7b96e

Exception code: 0xc0000005

Fault offset: 0x00052ca9

Faulting process id: 0x%9

Faulting application start time: 0x%10

Faulting application path: %11

Faulting module path: %12

Report Id: %13"
我不确定该显示代码的哪一部分,因为它有大量的集合类,但我会继续编辑这篇文章

我也尝试从任务管理器中转储文件,但我不确定如何使用它们

有什么特别的工具我可以使用吗?我正在使用VS2008。我查看了NLog,但我不确定如何处理它,所以跳过了


有什么建议吗?提示和诀窍?

尝试ThreadExceptionEventHandler并查看

 Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)

    private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
    {
        //Exception handling...
    }
编辑:在Windows窗体应用程序中,当在应用程序中的任何位置(在主线程上或在异步调用期间)引发异常时,可以通过在应用程序上注册ThreadException事件来捕获它

编辑2

尝试兼容?如果工作正常,那么就存在与Win7不兼容的问题。

尝试ThreadExceptionEventHandler并查看

 Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)

    private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
    {
        //Exception handling...
    }
编辑:在Windows窗体应用程序中,当在应用程序中的任何位置(在主线程上或在异步调用期间)引发异常时,可以通过在应用程序上注册ThreadException事件来捕获它

编辑2

尝试兼容?如果工作正常,那么就存在与Win7不兼容的问题。
您可以选择在

中运行程序。您可以选择在

中运行程序。错误模块名称:ntdll.dll
表示您有很多乐趣,但您应该从代码中的任何p/调用开始。从.NET不可能导致这样的错误,所以您正在调用的是一些本机DLL

p/Invoke允许您从托管代码调用普通的、本机的、非托管的可执行文件。这可以是未在.NET中编程的任何内容,即绘图库、音频库等。您可能在不知道(例如)是否有多媒体控件的情况下使用它。有一篇相当不错的文章

如果您正在与Microsoft Office进行COM互操作,上述操作同样适用。检查它是否为相同的Office版本,即使是,您也可能需要来自Microsoft的相同版本


您也可以尝试从VisualStudio启动应用程序,您可能会得到一个堆栈跟踪,它告诉您应用程序崩溃前的确切路径。然后你就会知道发生了什么。

出错模块名:ntdll.dll说你会玩得很开心,但你应该从代码中的任何p/调用开始。从.NET不可能导致这样的错误,所以您正在调用的是一些本机DLL

p/Invoke允许您从托管代码调用普通的、本机的、非托管的可执行文件。这可以是未在.NET中编程的任何内容,即绘图库、音频库等。您可能在不知道(例如)是否有多媒体控件的情况下使用它。有一篇相当不错的文章

如果您正在与Microsoft Office进行COM互操作,上述操作同样适用。检查它是否为相同的Office版本,即使是,您也可能需要来自Microsoft的相同版本



您也可以尝试从VisualStudio启动应用程序,您可能会得到一个堆栈跟踪,它告诉您应用程序崩溃前的确切路径。然后您就会知道发生了什么。

为了确定,您确定Windows 7计算机上安装了正确的.NET framework?是的,它安装在Windows 7中。NET framework版本为3.5 SP1@Øyvind Knobloch Brå然后这似乎是windows 7计算机上系统DLL中的一个问题。有了#Oyvind,.net framework的正确版本是一个很好的起点,确保它与XP上的版本相同。但是它看起来不像你的代码。我如何知道我是否得到了正确版本的.net framework?如果我从Windows7更新中获取它们,会有什么不同吗@Schroedingers CatNo版本应该是相同的(对不起,我的评论和你的评论是交叉的)。为了确定,你确定Windows 7计算机上安装了正确的.NET framework吗?是的,它安装在Windows 7中。NET framework版本为3.5 SP1@Øyvind Knobloch Brå然后这似乎是windows 7计算机上系统DLL中的一个问题。有了#Oyvind,.net framework的正确版本是一个很好的起点,确保它与XP上的版本相同。但是它看起来不像你的代码。我如何知道我是否得到了正确版本的.net framework?如果我从Windows7更新中获取它们,会有什么不同吗@Schroedingers CatNo版本应该是相同的(对不起,我的评论和你的评论都被划掉了)。请原谅我的无知,但是P/Invokes是什么意思@Vladislav ZorovI添加了更多的解释和调试想法:)很抱歉假设大家都知道一切:)我的大多数代码都与访问相关,所以我没有涉及P/Invoke如果“访问”是指Microsoft Access,那么是的,涉及P/Invoke。这是在幕后为你做的。你的问题很可能就在那里-不同的Office版本,没有安装PIA,等等@Vladislav Zorov:是的,我是说Microsoft Access Oledb。我下载了主互操作程序集?下一步是什么?请原谅我的无知,但是P/Invokes是什么意思@Vladislav ZorovI添加了更多的解释和调试想法:)很抱歉假设大家都知道一切:)我的大多数代码都与访问相关,所以我没有涉及P/Invoke如果“访问”是指Microsoft Access,那么是的,涉及P/Invoke。这是在幕后为你做的。你的问题很可能就在那里-不同的Office版本,没有安装PIA,等等@Vladislav Zorov:是的,我是说Microsoft Access Oledb。我下载了主互操作程序集?下一步是什么?我试过了