Mam's WebSite
建築CGパース住宅CGパース

Mamの覚書Q&A検索

トップページMamの覚書Q&A検索Delphi(いろいろ)⇒Q&A


大項目:「 Delphi 」 - 中項目:「 いろいろ 」

「 Delphiで作成したアプリケーションをマニフェストにて管理者権限ダイアログを表示するには 」

Delphiで作成したアプリケーションにマニフェストをリソースに埋め込んでユーザーアカウント制御(UAC)下で管理者権限で実行するためのダイアログを表示させる方法は?
(右クリックして「管理者権限で実行」や、ショートカットのプロパティに「管理者としてこのプログラムを実行する」にチェックをするのと同等の仕様をEXEファイルに埋め込むには?)


回答

リソースファイルをEXEファイルに以下の方法で埋め込めば、管理者権限で実行させることができます。
しかし、以下の方法では実際にはアプリケーションに署名がありませんので(ベリサインなどから署名をもらうことは、フリーソフトやシェアウェアでは不可能に近いので)「認識できないプログラムがこのコンピュータへアクセスを要求しています」と警告が表示されます。
「許可」をクリックすれば、管理者権限で動きます。
 
余談ですがほとんどのアプリケーションのセットアップ(インストール)プログラムは管理者権限の警告が表示されます。これはWindows Vistaが実行ファイル名にInstallやSetup等のキーワードがあるとインストーラーと判断するためです。自作アプリのファイル名がMySetup.exe等であれば、マニフェストをリソースに埋め込まなくても警告ダイアログを表示でき、管理者権限で実行できたりします・・・。

ソース

以下の内容のファイルをテキストエディタなどで「Delphiで作成した実行ファイル名.exe.manifest」の名前で文字コードUTF-8でアプリケーションと同じフォルダに作成します。
注意点:
<assemblyIdentity>のprocessorArchitecture="X86"は32ビットアプリのことのようです。ほかに64ビットアプリとしてIA64やamd64を指定できるようです。 
<assemblyIdentity>のversionではアプリケーションのバージョンをmajor.minor.build.revisionの順に入力します。
<assemblyIdentity>のnameはアプリケーションの名前を入れます。特に日本語の場合はUTF-8で保存する必要があります。しかしながら、署名がない場合はアプリケーション名に何を入れてもあまり関係ないようです・・・。
Delphi2009の場合は、IDEより[プロジェクト]→[オプション]→[アプリケーション]の
「ランタイムテーマを有効にする」のチェックをはずしてからコンパイルする必要があります。
 

---------------------------------------------------
↓ここから
<?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>
↑ここまで
---------------------------------------------------
 

 

 
次にテキストエディタなどで以下のリソースファイルをアプリケーションと同じフォルダに作成します。ファイル名は「MyRC.rc」とします。何でもいいのですが拡張子は.rcにします。
---------------------------------------------------
↓ここから
#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1
#define RT_MANIFEST 24
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "Delphiで作成した実行ファイル名.exe.manifest"
↑ここまで
---------------------------------------------------
 
Delphiを(管理者権限で)起動し埋め込みたいプロジェクトをロード後、[プロジェクト]→[プロジェクトに追加]で[ファイルの種類]に「リソースファイル」を選択し、上記の作成したrcファイル(MyRC.rc)をプロジェクトに追加します。
コンパイルすると、マニフェストが埋め込まれ、Microsoft Windows Vista上で(UAC有効時、または一般ユーザー権限[Usersグループのユーザー]時に)管理者権限を要求するアプリケーションが作成されます。


Mam's WebSite