2

重複の可能性:
.NET でのプロセス クラッシュの検出

別の C++ ゲーム プログラム (Foobar と呼びましょう) がクラッシュしたかどうかを判断する必要がある ac# プログラムを作成しています。FooBar プログラムがクラッシュすると、メッセージ ボックスでクラッシュについてユーザーに通知されます。そのウィンドウを OK すると、プログラムは閉じます。したがって、そのメッセージボックスが開いている/アクティブな場合、プログラムがクラッシュしたかどうかを判断できると思います。問題私はそれを行う方法がわかりません。または、他のより良い解決策が思い浮かんだ場合は、私と共有してください。

編集: C++ プログラムを編集できず、常にクラッシュする可能性があります。それがあったかどうかを知る必要があります。

4

2 に答える 2

2

.NET でのプロセス クラッシュの検出の複製。

ハートビートはおそらく進むべき道ですが、別の方法があります。

プロセスがクラッシュすると、Windows は最初に、システムに Just-In-Time デバッガーが構成されているかどうかを確認します。その場合、クラッシュする直前にそのデバッガーをプロセスにアタッチすることができます。通常、この機能を使用して、プロセスがクラッシュしたときにメモリ ダンプを生成します。アタッチするデバッガーは、クラッシュしているプロセスの PID と名前を認識します。ADPlus などの既存のデバッグ ツールの機能を利用するか、独自のプログラムを作成して、それが Just-In-Time デバッガーであり、プロセスがクラッシュしたときに実行する必要があることを 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 が渡されます。

于 2012-08-28T21:38:48.600 に答える
1

両方のアプリのコードにアクセスできる場合は、C++ アプリから C# アプリへのハートビート メッセージをセットアップし、ハートビートが停止したときに何でも行うことができます。通信には、名前付きパイプなどのようなものが必要です。あるいは、ファイル監視を使用して、c++ が定期的にファイルに書き込み、c# が更新を検出できるようにすることもできます。

于 2012-08-28T21:19:52.533 に答える