Windows Vista から搭載された、UACについて

Windows Vista からUACが搭載されました。
アプリを起動しようとすると、以下のような画面が表示されることがあると思います。
アプリを仮想化していると、この画面が問題になる事があります。
・起動時の問題
起動時に「はい」クリックしないと
いけないとか、管理者のID/PWを
入れなきゃいけないとか
・アプリの挙動に影響を与える
昇格( UAC )することによりアプリの動作が変更される。中途半端な状態で起動してしまう。
UAC の動作を設定するのは、アプリケーションマニフェストと呼ばれる物になります。
大きく分けると以下の3パターンで UAC の挙動を制御します。
・EXE自体に埋め込む場合
・ファイルとしてEXEと同じフォルダに設置
・アプリケーションの互換モードにより設定(EXEを右クリックして管理者として実行等)
UAC の実行モードは以下の3つから選択します。
・RequireAdministrator (管理者として実行)
管理者権限を持つユーザーの場合は、昇格を行う画面が表示されます。
一般ユーザーの場合は、管理者のID/PWを入力する画面が表示されます。
・HighestAvailable(持ちうる最高の権限で実行)
管理者権限を持つユーザーの場合は、昇格を行う画面が表示されます。
一般ユーザーの場合は、UACの画面が表示されずにアプリが起動します。
・RunAsInvoker(そのままの権限で実行)
UACの画面が表示されずにアプリが起動します。
このUACのポップアップを表示させないための対処方法は、何個かあります。
- Windows OSの設定から UAC を無効にしてしまう。
最終手段なので、いきなりこれは厳しいですね。せっかくの防御用の盾を捨てると
ウイルスに対して感染しやすくなってしまいます。
- 対象のEXEファイルに埋め込まれている、アプリケーションマニフェスト(Application Manifest)を変更する。
ResourceHacker等を使って書き換えます
level="highestAvailable"またはrequireAdministratorの部分を
RunAsInvokerへ変更
- EXE名にSetup/Install/Update等の予約後が含まれている場合は、EXE名を変えてしまう。
- EXEに埋込まれたアプリケーションマニフェストがない場合は、EXE名.manifestを作成してしまう。
- 最後の手段(裏技) 環境変数に以下を追加する
変数値: RunAsInvoker
※__COMPAT_LAYERのはじめの2文字は_アンダースコア 2つです。
Webを検索した限りでは、非公開のパラメータ?みたいです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
仮想アプリに環境変数を組み込む方法について
UACの昇格画面を抑えこむために __COMPAT_LAYER を使うのが手軽です。
また、OS全体orログインユーザーに設定するよりも、対象のアプリケーションの実行時だけ
有効になる方が、良いと思います。
せっかくアプリを仮想化しているので
対象の仮想アプリの実行時だけUACの昇格画面を無効にする方法については
次回書きたいと思います。
次回予告: 仮想アプリケーションに、環境変数を設定する方法について
ThinApp / App-V 両製品とも環境変数を柔軟にカスタマイズ可能です。
参考: