■ Windows イベントログ 操作で、SecurityExceptionが発生する
現象
VSで、Windowsイベントログに関する機能を開発している時に、例外「SecurityException」が発生する * Case1:EventLog.SourceExists()から例外が発生 * Case2:デザインナーでeventLogのプロパティ「Source」を入力した際に 警告ダイアログ(例外「SecurityException」が発生)が表示
トラブル詳細
Case1EventLog.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を管理者として実行してください。