我正在编写一个c#程序,必须确定是否有其他C ++游戏程序(让我们称之为Foobar)崩溃。 当FooBar程序崩溃时,它通过MessageBox通知用户崩溃,如果你确定该程序关闭了窗口。 所以我想如果打开/激活该消息框,我可以确定该程序是否崩溃。问题我不知道该怎么做。 或者,如果您有任何其他更好的解决方案,请与我分享。
编辑: 我无法编辑C ++程序,它总是有可能崩溃。我只需要知道它是否确实如此。
答案 0 :(得分:2)
重复Detecting process crash in .NET。
心跳可能是要走的路,但还有另一种方式。
当进程崩溃时,Windows首先检查您的系统上是否配置了实时调试程序。如果是这样,您可以让该调试器在崩溃之前将其自身附加到进程。通常,您将使用此功能在进程崩溃时生成内存转储。无论您附加什么调试器,都可以了解崩溃过程的PID和名称。您既可以利用现有调试工具的功能(如ADPlus),也可以编写自己的程序,并告诉Windows这是您的实时调试程序,应该在进程崩溃时运行。我相信你可以专门为任何进程名称设置一个JIT调试器。
请参阅http://msdn.microsoft.com/en-us/library/5hs4b7a6(v=VS.80).aspx
我认为如果您将HKLM \ Software \ Microsoft \ Windows NT \ Current Version \ AeDebug \ Debugger注册表项设置为'“DirectoryOfYourProgram \ YourProgram.exe”-p%ld',其中YourProgram.exe需要传入PID使用-p标志,当进程崩溃时,将调用您的程序并传递正确的PID。
答案 1 :(得分:1)
如果您可以访问这两个应用程序的代码,则可以从c ++应用程序设置心跳消息到c#app,并在心跳停止时执行任何操作。对于通信,你需要像命名管道或类似的东西。或者,您的c ++可以定期写入文件,您的c#可以使用文件监控来检测更新。