【トラブル】【.NET】Windows イベントログ に関するトラブルシューティング

Windows イベントログ 操作で、SecurityExceptionが発生する

現象

 VSで、Windowsイベントログに関する機能を開発している時に、例外「SecurityException」が発生する

 * Case1:EventLog.SourceExists()から例外が発生
 * Case2:デザインナーでeventLogのプロパティ「Source」を入力した際に
           警告ダイアログ(例外「SecurityException」が発生)が表示

トラブル詳細

Case1
EventLog.SourceExists()などで、例外「ソースが見つかりませんでしたが、
いくつかまたはすべてのログを検索できませんでした。アクセス不可能なログ: Security」が発生してしまう。
EventLogPermission()で、PermitOnly()を実行したが変わらず。
Case2
Windowsサービス作成時で、デザインナーから「eventLog」を追加し、
そのイベントログのプロパティ「Source」の値を入力後に警告ダイアログが発生。
内容を見ると、例外「SecurityException」が発生しているとのこと。

発生環境

 * OS : Windows7
 * VS : VS2008(.NET3.5)

ちなみに、以下の環境では、発生しなかった(同じPCではないが)
 * OS : WindowsXP
 * VS : VS2010(.NET4.0)

解決策

 * Visual Studioを[管理者として実行]として実行し、開発する

教訓

 * EventLog.SourceExists()で調べてなんで例外出るんだよーっと個人的には思うが、
   とりあえず、イベントログの処理は、try-catchで括った方がいいのかなって思った

参考文献

http://code.msdn.microsoft.com/windowsdesktop/C-Windows-9d002ee9
より抜粋

 Windows Vista 以降のユーザーアカウント制御 (UAC) が有効になっている OS で管理者権限を持たないアカウント、
あるいは [管理者として実行] しない場合、SecurityException が発生します。回避するには実行ファイルを 
[管理者として実行] する、アプリケーション マニフェストを設定し、アプリケーションの実行時に
管理者権限への昇格プロンプトを表示させる方法があります。

http://blogs.gine.jp/taka/archives/1415
より抜粋

ユーザーアカウント制御 (UAC)が有効の場合、「管理者として実行」しないと、例外(「System.Security.SecurityException: 要求されたレジストリ アクセスは許可されていません。」)が発生しますので、可能ならばVSを管理者として実行してください。

関連記事

C#】イベントログ出力

https://blogs.yahoo.co.jp/dk521123/27253094.html