VistaのUAC対策
Vista対応アプリ検証の覚書
UACの対象
フォルダ : ProgramFiles、Windows、Windows\System32
レジストリ : HKLM、HKCR
リダイレクト先
フォルダ : Users\[ユーザー名]\AppData\Local\VirtualStore\[フォルダ名]
HKLM\Software : HKCU\Software\Classes\VirtualStore\Machine\Software (64 bitは違うらしい)
マニフェスト設定によるUAC動作の違い
- マニフェストなし/XP用マニフェスト設定のみ
UAC対象への書き込みはバーチャルストアへリダイレクトされる。
多くのアプリで、最近使ったファイルなどが誤動作する。
- AsInvoker(Vistaデフォルト)
UAC対象への書き込みは無条件で失敗。リダイレクトされない。
ファイル選択ダイアログでUAC対象を選択すると、アクセス権限がないという通知ポップアップ。
- requireAdministrator (管理者権限)
UAC対象への書き込みは従来どおり可能。
ただし、起動時に管理者昇格の確認ダイアログが表示される。
Vistaの設計意図を考えれば、インストーラなど以外では非推奨。
対策
マニフェスト
リダイレクトによる誤動作を防ぐため、AsInvokerが一番スマート。
設定データ
- ユーザごと
HKCUレジストリか%APPDATA%フォルダ。
9x系には%APPDATA%がない。OS判定し、9x系はアプリケーションのフォルダでもいい。
.NETアプリならXMLファイルでもいいが、C++とかなら従来のINIファイルで十分。
- 全ユーザ共通
%ALLUSERSPROFILE%フォルダ。
やっぱり9x系にはない。
関連付け
- インストーラでHKLM
インストール後、AsInvokerなアプリから関連付けが変更できない。
HKLMに書き込み権限がないため。
変更する必要がある場合、一時的に管理者昇格するためのスタブプログラムを使うか、
IApplicationAssociationRegistration(要Vista SDK)で変更する。
- ユーザごとにHKCU\Software\Classes
仕様が許せば、これが確実。変更も自由。
OS判定し、9x系ではHKLMに登録すればいい。
戻る