如何创建单独的崩溃处理程序,如GoogleCrashHandler?
答案 0 :(得分:4)
这适用于非托管代码(Google的所有代码均为)。通常的情况是,应用程序打开命名管道与崩溃处理程序通信并告诉它开始观看应用程序。崩溃处理程序然后将命名事件添加到它监视的列表中。当应用程序崩溃时,使用SetUnhandledExceptionFilter()安装的应用程序内的异常过滤器将获得控制权。该异常过滤器然后打开命名事件。崩溃处理程序立即注意到,它需要一个崩溃的应用程序的小型转储并上传它。并终止该应用程序。
像这样的崩溃处理程序是必要的,因为崩溃的应用程序在受到心脏病发作时仍然无法正常运行。微软也有一个,它是在Windows中构建的。称为WER,Windows错误报告。当崩溃的应用程序询问您是否可以让微软了解崩溃时,这就是您看到的对话框的来源。
这种方法对于托管应用程序是不必要的。他们几乎永远不会死于非托管应用程序死于的硬件异常(如AccessViolation)。只需编写AppDomain.UnhandledException事件的代码。
答案 1 :(得分:1)
Google崩溃处理程序似乎是一个在其他应用程序中发生某些事情时会收到通知的应用程序。
“ GoogleCrashHandler.exe会在您的计算机上连续运行,如果您选择向Google发送匿名使用情况统计信息并向Google发送崩溃报告,例如Google Chrome。它会帮助您在Google软件时向Google发送崩溃详情意外关闭。我们使用这些数据来帮助确定如何防止将来发生这些错误。“
我会创建一个在后台运行的Windows服务,通过命名管道,tcp,文件丢弃或任何其他好方法进行通信。
然后,服务会向特定服务器(或服务器列表)发送通知, 与收集的信息。它可以充当缓冲区,因此您不必在每次内部通知时向服务器发送通知。
我会让服务在服务器上调用Web服务,当它准备好溢出它的bean时。
之后创建的每个应用程序都应该能够检查您的“崩溃处理程序”是否正在运行,并在适当时通知它有关错误或异常等。
但是,由于此行为可能会使某些本地防火墙程序出现问题,并且用户可能会质疑正在发送的数据以及何时发送,您需要将此文档记录得很好,并且非常关注您正在收集哪些数据,为什么要收集这些数据它,以及发送的地方。