0

ASP .NET アプリからアプリケーション イベント ログにログを記録したいと考えています。EventLog.SourceExists を呼び出して、最初にイベント ソースが存在するかどうかを判断し、存在しない場合は作成します。

MSDN (http://msdn.microsoft.com/en-us/library/6s7642se.aspx) で説明されているように、「Windows Vista 以降または Windows Server 2003 でイベント ソースを検索するには、管理者権限が必要です。この要件の理由は、セキュリティを含むすべてのイベント ログを検索して、イベント ソースが一意かどうかを判断する必要があるためです。Windows Vista 以降、ユーザーはセキュリティ ログにアクセスする権限を持っていないため、SecurityException がスローされます。 "

私の場合、NetworkService ユーザーには管理者権限がないため、EventLog.SourceExists は MSDN に記載されているように SecurityException をスローします。

私の質問は、EventLog.SourceExists への呼び出しを防御的にコーディングするにはどうすればよいですか? EventLog.SourceExists を呼び出す前に、イベント ソースを検索する権限があるかどうかを確認するために呼び出すことができるものはありますか?

または、 SecurityException をキャッチし、catch ブロック内で他のアクションを実行する唯一のオプションです。たとえば、既存のイベントソースにログを記録します。

ありがとう

ケビン

4

1 に答える 1

0

Windows アプリケーション イベント ログに必ず書き込む必要がありますか? デフォルトで設定されているセキュリティ制限により、これを行うのは困難です。新しい VM で開発を行うたびに、NETWORK_USER アカウントがログに書き込むことができるようにレジストリ エントリを作成する必要があり、アプリケーションをライブ サーバーにロールアップするとすぐに (大規模なレジストリの変更を行うのはおそらくそうではありません)良い考えです)それからあなたはスヌーカーです.

また、これまでの経験から、Windows イベント ログはログ記録やデバッグに適した環境ではないことがわかりました。夜間に実行されるサーバー アプリの場合、すべてのイベント ログを html ファイルに記録して、翌日に読み取ることができるようにする傾向があります。Web アプリの場合は、カスタム データベースを使用して、代わりにすべてのイベントをそこに送信します。

于 2012-05-01T11:41:37.387 に答える