是否可以获取触发Microsoft Windows错误报告的应用程序的崩溃详细信息?

时间:2011-11-06 02:54:11

标签: c# winforms windows-7

我有一个用C#编写的应用程序。此应用程序通过Windows锁定,返回类似:“xxx应用程序已停止工作”。

有可能找到这次崩溃的原因吗?我尝试在整个应用程序中使用try {} catch {}但没有成功。它适用于我的电脑,但不适用于我朋友的电脑。 两台计算机都具有相同的配置:

  • Windows 7 7终极32位
  • 处理器:2.13ghz
  • 记忆ram:2gb

更新

好吧,在我朋友的计算机日志中,我发现了一些崩溃的细节:

Faulting application name: xxxx.exe, version: 1.0.0.0,time stamp:0x4eb5e63a
Fault Module Name:KERNELBASE.dll, version: 6.1.7600.16850, time stamp:0x4e21132b
Exception Code:0xe0434352
Identification of the process that failed: 0x26c
Start time of the faulting application: ... 
Faulting application path: ... \xxx.exe 
Path F module failures: C:\Windows\system32\KERNELBASE.dll
Report ID: xxxxx-yyyy-dddd-dddd-aaaaaa

更新2

最后,我找到了导致异常的函数。 使用try {} catch (Exception Err) {}处理函数我发现了一些异常细节:

Err.Message:The device is not ready
Err.Source: mscorlib

我该如何解决?

2 个答案:

答案 0 :(得分:3)

“在我的机器上工作”是一个非常常见的问题,有无数的原因。通常原因是两台机器之间存在某些不同。一些容易排除的事情:

  • 你朋友的电脑是开发机器,安装了Visual Studio吗?
  • 您的应用程序是否依赖于特定路径(例如,D:驱动器),数据库,服务,COM组件或安装包应包含的其他内容?
  • 让您的朋友配置UAC与您不同?您是否有人以帐户管理员身份登录,而另一人使用管理员组中的其他帐户?
  • 您是否在朋友的机器上测试了调试版本?调试版本通常不是可再发行的
  • 您是否测试了某个类库的exe和版本y的x版本,忘记昨天你对其中一个进行了更改?
  • 您和您的朋友有不同版本的IE,Office或应用程序可能使用的其他组件吗?你有不同的IE设置(例如代理?)
  • 这两台计算机是否完全采用了更新和服务包?
  • 是试图访问不在朋友机器上的某些硬件(麦克风,网络摄像头)的应用程序,还是两台机器之间的重要差异?

您的问题的字面答案是肯定的,您可以注册一个名为Windows错误报告的内容,并获取该对话框所说的正在收集的报告。但是,我真诚地怀疑你是否想要它们。您应该拥有所需的所有信息,以便在您所处的位置找到错误。专注于两台机器之间的不同之处(即使你认为它是无关紧要的)。

答案 1 :(得分:1)

很可能是缺少依赖性。仔细检查以确保您的程序正在安装它所需的所有Dll。我遇到了类似的问题,通常是.ocx文件未正确注册或不存在。

就您的问题而言,请尝试使用.Net Framework SDK或Visual Studio中的MDbg.exe文件。 Microsoft还提供其他debugging tools