C# 是否可以编写一个看门狗进程来捕获应用程序崩溃?

C# 是否可以编写一个看门狗进程来捕获应用程序崩溃?,c#,windows,process,crash,C#,Windows,Process,Crash,我们正在开发一款视频游戏,它与任何应用程序一样,没有任何漏洞,有时会导致硬崩溃。不幸的是,由于我们使用的是封闭源代码中间件(Unity 3D),到目前为止,我们编目的许多崩溃都超出了我们的控制范围,无法解决它们或解决它们 虽然我们可以希望并等待中间件开发人员解决这个问题,但我们想看看是否有可能至少让崩溃信息更丰富、用户更友好。例如,我们的用户可能遇到的一个罕见的崩溃是,某些AV产品导致某种线程上下文竞争条件,并导致游戏爆发。我们希望能够检测到崩溃和错误特征,并向用户提供一个指向我们的wiki或论

我们正在开发一款视频游戏,它与任何应用程序一样,没有任何漏洞,有时会导致硬崩溃。不幸的是,由于我们使用的是封闭源代码中间件(Unity 3D),到目前为止,我们编目的许多崩溃都超出了我们的控制范围,无法解决它们或解决它们

虽然我们可以希望并等待中间件开发人员解决这个问题,但我们想看看是否有可能至少让崩溃信息更丰富、用户更友好。例如,我们的用户可能遇到的一个罕见的崩溃是,某些AV产品导致某种线程上下文竞争条件,并导致游戏爆发。我们希望能够检测到崩溃和错误特征,并向用户提供一个指向我们的wiki或论坛的链接,介绍如何解决它(如果可能)


是否可以编写一个轻量级的看门狗进程或父进程来响应Windows平台上的崩溃事件?

在崩溃进程之外收集崩溃转储非常重要。您永远不知道未处理的异常处理程序是否受到影响。但还有其他选择:

  • 启用WER并为存储转储的目录编写看门狗(FileSystemWatcher)
  • 在崩溃时配置并附加您自己的调试器

当然,这是WER已经在做的事情。Windows错误报告,向用户显示“我们很抱歉”消息框。您可以从仪表板获得的报告类型如下。或者您可以自己编写,SetUnhandledExceptionFilter()winapi函数是核心。我不相信我可以从外部进程使用它?不,发生崩溃的进程需要调用SetUnhandledExceptionFilter()。你在过滤器里做什么取决于你自己,尽可能少是明智的。将异常信息写入先前创建的内存映射文件,并用命名事件向看门狗进程发送信号是样板方法。如果你写一个更完整的解释作为回答,我想我可以接受。