确定程序是否崩溃

Determine if program crashed

本文关键字:崩溃 是否 程序      更新时间:2023-10-16

可能重复:
检测.NET 中的进程崩溃

我正在编写一个c#程序,它必须确定另一个c++游戏程序(我们称之为Foobar)是否崩溃。当FooBar程序崩溃时,它会用MessageBox通知用户崩溃的消息,如果你确定窗口,程序就会关闭。所以我想如果这个消息框打开/激活,我可以确定程序是否崩溃。问题我不知道怎么做。或者,如果你想到了其他更好的解决方案,请与我分享。

编辑:我不能编辑C++程序,而且它总是有崩溃的可能。我只需要知道是不是真的。

在.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\Degger注册表项设置为"DirectoryOfYourProgram\YourProgram.exe"-p%ld,其中YourProgram.exe需要一个带有-p标志的PID,则当进程崩溃时,您的程序将被调用并传递正确的PID。

如果您可以访问这两个应用程序的代码,您可以设置从c++应用程序到c#应用程序的心跳消息,并在心跳停止时执行任何操作。对于通信,你需要一些类似命名管道或类似的东西。或者,您的c++可以定期写入一个文件,您的c#可以使用文件监控来检测对该文件的更新。