1

Windows イベント ログにレコードを書き込むためのテスト プログラムを誰かがくれました (ただし、ソースはありません)。イベント ログの一般的な書き方と確認方法は理解できますが、そのプログラムは、ソースが存在しないレコードを書き込むことができるという点で非常に特殊な動作をします。.../eventlog/application にはレジストリ エントリさえないため、フォーマット ライブラリはありません。

自分のコードからそれを試してみると、そのようなレコードを書くことができますが、Windows イベント ビューアーは常に「説明が見つかりません」というメッセージを表示します (これは正しく、その理由は理解できます)。

問題は次のとおりです。その外国のテストプログラムはそれを行うことができるので、何らかの方法で可能であるに違いありません-しかし、どのように?

たくさんthx!! :-)

4

1 に答える 1

1

OK、ついに見つけました(ソースも取得しました)-プログラムはレジストリエントリを作成します(おそらくCreateEventSource()を呼び出すときに発生します)、regeditを更新するまで表示されませんでした:-|

そして、それはフォーマットライブラリを登録しますが、それは私が信頼できないものであるということだけです: C:\Windows\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll

または、できますか?

ああ、ここで説明します: EventLog.WriteEntry メソッドと EventLog.WriteEvent メソッドの違い .Net を使用していないので、できません ... :-|

ここで、MY プログラムから別のイベントを送信すると (外部プログラムと同じ、新しく作成されたソースを使用して)、イベント ビューアーに正常に表示されます。つまり、WriteEntry() は実際には、テキストを含む別の/特別なタイプの evt ログ レコードを直接書き込むわけではなく (msg カタログ ID + パラメータのみを書き込む標準的な方法とは対照的に)、フォーマット ライブラリに何らかのトリックが必要です。 EventViewer にある種の「デフォルト」フォーマットを適用させます。

これを達成する方法はありますか?上記の EventLogMessages.dll をコピーする以外は? :-)

OK、最終的にhttp://msdn.microsoft.com/en-us/magazine/cc163446.aspxで これに関する回答を見つけました。文字列 "%1"、書きたい文字列のプレースホルダー"

「messageid=*」のようなものを望んでいましたが、それは単純すぎるようです :-|

しかし、おそらく他の誰かがここで起こっていることに興味を持っています...

于 2013-05-03T07:57:27.603 に答える