イベントログのカテゴリに文字列が設定できない
イベントログ出力について調べているのですが,イベントログには分類(Category)という要素があります.ここに値(文字列)を設定したいのですがどうしてもうまくいかず困っています.
自分が調べたこと・やったこと
イベントログを出力するには,System.Diagnostic名前空間のEventLogクラスを使います.出力用のメソッドは2つあって,1つは気軽に文字列を出力できるWriteEntryメソッド,もう1つは事前に出力する文字列を用意する必要があるWriteEventメソッドです.本来であればWriteEntryメソッドを使いたいところですが,分類(Category)を設定するにはWriteEventメソッドを使用しなければならないらしい,ということが分かりました.
WriteEventメソッドを使用するにはリソースファイルを使います.リソースファイルは専用の書式に従ったテキストファイルで,それをmc.exe / rc.exe / link.exeといったコマンドを使ってDLLにします.このDLLを,EventSourceCreationDataクラスやEventLogInstallerクラスを使って,レジストリに設定します.自分はEventSourceCreationDataクラスを使いました.
http://msdn2.microsoft.com/ja-jp/library/system.diagnostics.eventsourcecreationdata(VS.80).aspx
http://msdn2.microsoft.com/ja-jp/library/system.diagnostics.eventsourcecreationdata.messageresourcefile(VS.80).aspx
MessageResourceFileプロパティの使用例にはリソースファイルのサンプルがあったのでそれをそのまま利用させてもらい,EventLog#CreateEventSourceメソッドで登録しました.ちなみにCategoryCountプロパティには3を設定しました.
とりあえずここまででレジストリを確認してみると,なんとなくあっていそうな感じです.
http://msdn2.microsoft.com/ja-jp/library/650k61tw(VS.80).aspx
EventLog#WriteEventの使用例をもとに,以下のようなコードを書きました.
EventInstance instance = new EventInstance(1000, 0, EventLogEntryType.Information); string [] insertStrings = {"EventLogSamples.WriteEventSample1"}; myEventLog.WriteEvent(instance, insertStrings);
実行したところ,問題なく想定した通りに書き込めているようです.ここまでは非常に順調です.
さて,ここまでで準備が完了し,いよいよ分類(Category)に文字列を設定したいと思います.おそらく,
EventInstance instance = new EventInstance(1000, 3, EventLogEntryType.Information);
とすれば,3に対応する文字列である
Data Refresh
が出力されるはずです.しかし,
(3)
が出力されてしまうのです.このような文字列が出るのは
http://msdn2.microsoft.com/ja-jp/library/system.diagnostics.eventinstance.categoryid(VS.80).aspx
によると,
ローカライズされたカテゴリ文字列をイベント ビューアに表示するには、カテゴリ リソース ファイルで構成されたイベント ソースを使用し、CategoryId を、カテゴリ リソース ファイル内のリソース識別子に設定する必要があります。イベント ソースに構成済みのカテゴリ リソース ファイルがないか、指定された CategoryId がカテゴリ リソース ファイル内の文字列のインデックスを作成していない場合、イベント ビューアは、そのエントリのカテゴリ値を表示します。
ということなのですが,いろいろ見直してあれこれ試してみてもうまくいきません.ということで途方にくれています.
もうちょっと粘ってみて,それでもダメならコミュニティに質問しようかな?とも思ってますが,あともうちょっとのところなのでちょっと悔しい.無念です.