2008年7月18日金曜日

.NET Vista対応 その2 マニフェストファイルを使用する

Vista対応 その1

マニフェストファイルを作成します


WindowsApplication1.exeというプログラムがあるとしたら、マニフェストはWindowsApplication1.exe.manifestという名前
でプログラムと同じフォルダに配置します。

マニフェストファイルの内容は



Description of your application











3行目のプログラム名と11行目の権限レベルを指定します。

権限レベルは以下の3種です。
AsInvoker:制限された権限で動作可能
highestAvailable:ユーザーが持つ制限されない権限が必要
requireAdministrator:管理者権限が必要

1、マニフェストファイルがない場合、または権限レベルが指定されていない場合
UACの制御により、「%SystemRoot%」,「%ProgramData%」,「%ProgramFiles%」フォルダへの書き込み、レジストリ・キー「HKEY_LOCAL_MACHINE\Software」への書き込みはリダイレクト先に書き込まれます。

2、マニフェストファイルがあり、かつ権限レベルが指定されている場合
UACの制御によりリダイレクトは行われません。

3、マニフェストファイルの権限レベルがAsInvekerの場合
UACの制御により、「%SystemRoot%」,「%ProgramData%」,「%ProgramFiles%」フォルダへの書き込み、レジストリ・キー「HKEY_LOCAL_MACHINE\Software」への書き込みはリダイレクトされず、書き込みに失敗します。

4、マニフェストファイルの権限レベルがhighestAvailable、requireAdministratorの場合
UACの制御により、「%SystemRoot%」,「%ProgramData%」,「%ProgramFiles%」フォルダへの書き込み、レジストリ・キー「HKEY_LOCAL_MACHINE\Software」への書き込みはリダイレクトされず、UAC 昇格確認ダイアログが表示され書き込みを行えます。
また権限の昇格を行わないと実行できないマークである「シールドアイコン」が自動でアプリケーションアイコンに表示されます。

5、その他
基本的には requestedExecutionLevel 要素の level 属性値が優先されますが、この要素記述が無い場合 「install」、「setup」、「update」 などのキーワードがファイル名に含まれるとインストーラと判断され、UAC 昇格確認ダイアログが表示されます。


※ちなみにuiAccessにTrue を指定するには、Microsoftへの申請が必要です。ユーザー補助アプリケーションのみが対象となっています。


マニフェストファイルをプログラムファイルに埋め込む


1.VSを起動し「ファイルを開く」で組み込み先のEXEファイルを選択します。


2.EXEファイルを右クリックして「リソースの追加」を選択します。


3.「インポート」をクリックし、作成しておいたマニフェストファイルを選択し、リソースの種類を「RT_MANIFEST」と入力します。


4.IDを101から1に変更し、保存します。


※ちなみに外部マニフェストと埋め込みマニフェストが共にある場合
Windows XP では、外部マニフェストを使用します。
Windows Server 2003 およびそれ以降のバージョンの Windows では、埋め込みマニフェストが存在する場合はそれが使用され、外部マニフェストは無視されます。

0 件のコメント: