2

Windows イベント ビューアーのグローバルな "アプリケーション" ログに警告とエラーが表示されるように、アプリを有効にしたいと考えています。ETW を起動して実行するのに役立つこちらの指示にうまく従いましたが、トレース プログラムを介してログ記録を明示的に有効にした場合にのみイベントが表示されます。さらに、グローバルではなく、生成された .etl ファイルにのみ表示されますログ。

ユーザーがイベント ビューアーを実行すると、アプリからのイベントが表示されるように、プログラムでイベントを登録してグローバル アプリケーション ログに書き込むにはどうすればよいですか? それは可能ですか?簡単に言えば、必要なフォトショッピングを減らして、下のスクリーンショットのようなものにしたいと考えています。

ここに画像の説明を入力

4

1 に答える 1

2

ETW は目的に対して非常に複雑なようです。イベント ログに書き込む手順は次のとおりです。

a) 1 回限り (通常、これはアプリケーションのインストール中に行います)アプリケーションを Event Provider として登録しますEventMessageFile本当に必要なのはエントリだけです:
- キー = HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application\MyCoolGame
- 文字列名 (REG_EXPAND_SZ) = EventMessageFile
- 文字列値 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\ EventLogMessages.dll

b) プログラムの起動時:イベント ソースを登録し、ハンドルを受け取ります。

hEventLog = RegisterEventSource(NULL, lpszAppNameName);

c) ReportEvent 関数を使用して、イベント ログにエントリを書き込みます。

TCHAR szLogBuffer[] = _T("Started new multiplayer server.");
const TCHAR *lpszEventStrings[2] = {szLogBuffer, NULL};
ReportEvent(hEventLog, EVENTLOG_INFORMATION_TYPE, 0, 1, NULL, 1, 0, lpszEventStrings, NULL)

d) プログラムのシャットダウン時:

DeregisterEventSource(hEventLog);
于 2013-10-27T08:45:20.337 に答える