毛のはえたようなもの

インターネット的なものをつらつらとかきつらねる。

VisualStudioで管理者権限で実行するアプリケーションを作る

パソコンの奥深くの情報を探ってプログラムを書く必要が出てきたのでエントリ。
大部分、monaeデバッガが教えてくれましたが・・・・。

*.manifestでrequestedPrivilegesというのをいじる必要があるらしい

ちょっと奥底にあるデータを読みだすアプリケーションを作ろう!と思うと、管理者権限が必要になるときがあります。
管理者権限が必要なときは、管理者権限で実行するための確認ダイアログを出さなくてはなりません。
あのー、画面が暗くなる、あれです。


アプリケーションを管理者権限で実行したい場合、.manifestの中身をいじる必要があるのですね。
具体的には、「requestedPrivileges」の「requestedExecutionLevel 」を「requireAdministrator」にする必要があるみたい。
参考:http://blogs.msdn.com/b/tsmatsuz/archive/2006/11/01/windows-vista-uac.aspx

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="WindowsApplication1" type="win32"/>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
         <requestedPrivileges>
            <requestedExecutionLevel level="requireAdministrator"/>
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly>

「要求された操作には管理者特権が必要です」とでて、デバッグできない

さてさて、プログラム自体に管理者権限の確認ダイアログを開かせることはできた。
しかし、デバッグさせようと思って、動かすとコンパイルはできるが「要求された操作には管理者特権が必要です」とでて止まってしまう。
コンパイル済みのexeファイルは実行できる。

どうやら、デバッガ(ようするにVisualStudio)がデバッグ対象のexeファイルを開くとき、デバッガ自体が管理者権限を持っていないといけないらしい。

VisualStudioのアプリケーションのうち、管理者権限を持っている必要があるのは、以下の二つだそうだ。(ここを参考にしました。)

ファイルのプロパティから変更することができる。
管理者権限は、全てのユーザに対してつけておくのがお勧め。
(というか、そうしないと私は動かなかった。気のせいかもしれない。)


これで、管理者権限が必要なプログラムをデバッグできるようになりました。
めでたし!