0

プログラムがクラッシュした場合に、デバッグのために情報をどこかに保存したいと思います。次回の起動時に、この情報を読みます。レジストリまたはファイル システムでこれを行うこともできますが、それほど高速ではありません。共有メモリと 2 番目のプロセスを使用できますが、2 番目のプログラムを常に実行することは避けたいと思います。

これよりも速い方法があれば知りたいです。プログラムがクラッシュしても高速で失われない Windows メカニズム (パイプ、共有メモリなど) はありますか?

4

1 に答える 1

0

アプリケーション イベント ログを使用することを検討してください: (ここでは C# コードですが、アンマネージも可能です)

string cs = "MyAppEvents";
if (!EventLog.SourceExists(cs))
   EventLog.CreateEventSource(cs, "アプリケーション");    

EventLog.WriteEntry(cs、メッセージ、EventLogEntryType.Error);

そこに書き込まれたイベントはサービスに送信されますが、これは十分に高速な場合があります。イベント ログ サービスのアーキテクチャについては、http: //oreilly.com/catalog/winlog/chapter/ch02.htmlで説明されています (古いものですが、あまり変わっていません)。

編集: NT4 の時代から変更されました :) Windows のバージョン (>2000 - NT5) には、イベント トレーシングと呼ばれるより効率的な機能がありません。ここで詳細を読むことができますhttp://msdn.microsoft.com/en-us/magazine/cc163437.aspx

合理的な実装では、プロセス内の advapi32 とサービスの間で名前付きパイプを使用する必要があります。これは、同じマシン上で共有メモリ マップを使用します (実際、Windows システムで見つけることができる他のパイプの中に「eventlog」と呼ばれる名前付きパイプがあります)。

于 2013-01-24T11:20:03.200 に答える