1.概要
Visual Studioで作成したアプリケーションで
システムファイルやレジストリの操作を行う場合
アプリケーションを管理者権限で起動する必要があります。
管理者として実行していない場合
予期せぬエラーが発生し、アプリケーションの不具合となる場合がありますので
アプリケーションの機能に管理者として実行すべき機能があるのであれば
それは明示する必要があります。
2.特に意識せず作成した場合
管理者権限を意識せずレジストリの操作を行うアプリケーションを作成してみました。
フォームにボタンを貼り付け
下記のスクリプトを実行します。
Microsoft.Win32.RegistryKey regKey_CPBA = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"); regKey_CPBA.SetValue("ConsentPromptBehaviorAdmin", 0); regKey_CPBA.Close(); Microsoft.Win32.RegistryKey regKey_POSD = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System"); regKey_POSD.SetValue("PromptOnSecureDesktop", 0); regKey_POSD.Close();
スクリプトの内容は下記の記事の内容になります。
www.chuken-engineer.com
実行した結果、下図のとおり
【System.UnauthorizedAccessException】が発生し
アクセスが拒否されてしまいます。
3.アプリケーションに管理者権限を与える
アプリケーションが常に管理者権限で実行可能なよう設定していきます。
実現するには【アプリケーションマニフェストファイル】をプロジェクトに追加します。
①アプリケーション名を右クリックし
→【追加】→【新しい項目】をクリックします。
②【アプリケーションマニフェストファイル】を選択し【追加】をクリックします。
追加が完了すると
【app.mainfest】
というファイルが作成されます。
ここにある
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
をコメントアウトし
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
をアンコメントします。
設定はこれで完了となります。
4.実行する
先程のスクリプトを実行してみます。
【Visula Studio】の管理画面から実行すると
下図のとおり【Visula Studio】自体のの権限を上げるようなポップアップが表示されますので
【異なる資格情報で再起動】をクリックします。
そうすると【Visula Studio】が再起動し管理者として実行されます。
この状態でアプリケーションを実行すると
スクリプトが問題なく実行されるようになります。
ビルドされたアプリケーションも
から
へ変更されます。
※管理者のマークが追加されます。