プログラムがクラッシュした場合に、デバッグのために情報をどこかに保存したいと思います。次回の起動時に、この情報を読みます。レジストリまたはファイル システムでこれを行うこともできますが、それほど高速ではありません。共有メモリと 2 番目のプロセスを使用できますが、2 番目のプログラムを常に実行することは避けたいと思います。
これよりも速い方法があれば知りたいです。プログラムがクラッシュしても高速で失われない Windows メカニズム (パイプ、共有メモリなど) はありますか?
アプリケーション イベント ログを使用することを検討してください: (ここでは 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」と呼ばれる名前付きパイプがあります)。