ちょっとWPFアプリでC#からサービスを操作したいという衝動に駆られたので色々いじってたのですが、サービスレベルの操作をするには当然ながら管理者権限が必要でして、その設定方法を調べたのでメモ。

seacret service

実行環境

  • Windows 7 Professional 64bit
  • Visual Studio Community 2013

UACで常に管理者権限でアプリを実行する方法

VISTA以降のWindowsではユーザーアカウント制御(UAC)によってプログラムによって制御できる範囲に制限が掛けられています。
この制御を外すにはいくつかの方法があるのですが、今回はアプリが起動するときに自動的に「管理者として実行」するように仕向ける設定です。

管理者権限の設定を行う

アプリを実行する時は常に管理者権限を求めるようにします。
こうすることで開発中のデバッグ実行でも管理者権限で実行されるようになります。

app.manifestを作成する

まずはプロジェクトのプロパティにapp.manifestを追加します。
手動で追加してもいいですが、めんどくさいので自動生成させます。

プロジェクトのプロパティを開く

プロジェクトの初期状態にはapp.manifestがありませんのでプロジェクトのプロパティを表示します。
プロジェクトのプロパティを開く

ClickOnce セキュリティを有効にする

続いて「セキュリティ」から「ClickOnce セキュリティを有効にする」をチェックします。
execute app by admin (4)

app.manifestが作成されたことを確認する

「ClickOnce セキュリティを有効にする」のチェックをオンにすると自動的にapp.manifestが生成されるので、作成されたことを確認します。

この状態でビルドして生成されたexeファイルを「管理者として実行」すると管理者権限を取得してプログラムを実行することも可能です。

作成されたことが確認できたらチェックをオフにしてください。
今後の設定を行うことでビルドエラーになります。

app.manifestが作成されたことを確認

生成されたapp.manifestを編集する

app.manifestを開いて「requestedExecutionLevel」をasInvokerからrequireAdministratorへ変更する。
asInvokerからrequireAdministratorへ変更

Visual Studioを再起動する

ビルドを実行すると管理者権限でVisualStudioを再起動する旨のメッセージが表示されるので再起動しましょう。
これで設定は完了です。

以降はVisual Studioを起動してビルドをしようとすると管理者権限での再起動を促されるので、Visual Studioを立ち上げる時は「管理者として実行」で起動すると良いでしょう。
VisualStudioを再起動する

編集後記

結構めんどくさいかと思ってた管理者実行もサクサク設定できるので便利ですね。

いつもシェアありがとうございます!気に入ったらシェアしていただけたら幸いです。