Windows 7 - 禁用关闭程序/调试程序对话框,但崩溃转储并通知用户

时间:2011-07-19 17:31:02

标签: c# crash-dumps crash-reports windows-error-reporting custom-error-handling

我正在开发一个商业Windows 7桌面应用程序(稍微收缩包装,但不完全)。该应用程序具有Windows服务和WPF用户界面组件。如果我们的应用程序在客户站点失败,我们希望能够捕获有关运行时环境的信息,包括将流程故障转储到转储位置。然后,根据要求进一步调查,可以将这些信息提供给我们的支持人员。我们还希望关闭因故障而可能弹出的任何 Windows错误报告发送到Microsoft 对话框。

重要的是我们只希望这会影响我们的应用程序流程。我们不希望影响某些全局设置,这将改变客户桌面上所有其他应用程序报告致命错误的方式。

我正在寻找在收缩包装应用程序中执行此类操作的一些建议和最佳实践。

1 个答案:

答案 0 :(得分:3)

我知道如何执行此操作的最佳方式是订阅AppDomain.CurrentDomain.UnhandledException事件。在那里,您将能够使用Win32 API函数MiniDumpWriteDump来创建自己的minidump文件。查看this blog post以查看一个很好的示例。此外,还有ClrDump库。

在退出UnhandledException处理程序之前,请调用Environment.Exit(),您不应再看到Windows错误对话框。

我自己还没有真正使用过这些minidump库,但我很快就会这样做。希望这个答案至少会为您提供一些可以插入Google的关键字。