C#

C# イベントログに出力するには?(管理者に昇格させる)

更新日:

.NETのプログラムから、System.Diagnostics.EventLogクラスを使うことでWindowsのイベントログにログを取得・出力することができます。

 

イベントログを取得するプログラム

下記のようなコードになります。

 

ビルドして、実行するとイベントログがコンソールに表示されます。

 

イベントログを出力するプログラム

同じく、下記のようにちょっとしたコードを書けばいいだけ・・・のはずが

 

 

ビルドして、そのまま実行しても'System.Security.SecurityException'という例外が発生してイベントログに出力できません。

 

ところが

このビルドしたプログラム(exeファイル)を右クリックしてから「管理者として実行」で実行すると、そのままイベントログに出力できます。

これは、マイクロソフトのサイトにもこう書かれています。

 

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

 

という機能によるもので、この

アプリケーション マニフェストを設定し、アプリケーションの実行時に管理者権限への昇格プロンプトを表示させる

ことで管理者権限への昇格を行う必要性があります。

 

アプリケーションマニフェスト

Visual Studioを使用している場合、このプロジェクトに「アプリケーションマニフェスト」と呼ばれるファイルを追加します。

  1. プロジェクトを選択して右クリック
  2. [追加]メニューをクリック
  3. [新しい項目...]をクリック
  4. 「Visual C#アイテム」の「全般」の中にある”アプリケーションマニフェストファイル”を選択
  5. [追加]ボタンを押します。

関係個所だけ抜粋しました。

 

この中にある"requestedExecutionLevel"タグ(19行目付近)のlevel属性の値を"asInvoker"から"requireAdministrator"に変更するだけです。

変更後、ビルドするとexeファイルに盾マークもつけてくれます。

ビルドして実行すると下記のような画面が出ます。

 

「異なる資格情報で再起動」を選ぶとVisual Studioが再起動して、管理者として実行できるようになります。

 

気を付けてほしいこと

この「異なる資格情報で再起動」をするとVisual Studioで実行している分には、普通に見えますが、ビルドしたexeファイルで実行するときは、「ユーザーアカウント制御(UAC)のダイアログ」は表示されます。

 

-C#
-, , , , , ,

Copyright© プログラミングテクニック集キヤミー , 2020 All Rights Reserved.