2

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

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

编辑:我无法编辑 C++ 程序,而且它总是有可能崩溃。我只需要知道它是否确实如此。

4

2 回答 2

2

.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 需要通过 - p 标志,当进程崩溃时,您的程序将被调用并传递正确的 PID。

于 2012-08-28T21:38:48.600 回答
1

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

于 2012-08-28T21:19:52.533 回答