Windows Vista の Windows インストーラ配置
更新 : 2007 年 11 月
Windows インストーラ テクノロジは、Windows Vista オペレーティング システムへのソフトウェア インストールをサポートします。エンド ユーザーのコンピュータがユーザー アカウント制御 (UAC: User Account Control) 下で動作しているときでも、Windows Vista にアプリケーションをインストールするユーザーにプロンプトが出されるのは、アクセス許可の昇格を必要とする個々のコンポーネント インストールについてのみです。UAC の設定方法については、「Windows Vista と Visual Studio」を参照してください。
アプリケーションのアクセス許可の昇格
通常、Setup.exe (別名ブートストラップ) はユーザーの現在のアクセス許可レベルで実行され、昇格したアクセス許可で実行されるわけではありません。したがって、最終的なアプリケーション インストールが始まるときに、アクセス許可の昇格を求めるプロンプトが出されることはありません。ただし、Setup.exe は通常はプロンプトを出さないのに対し、.msi ファイルは通常、ユーザーにプロンプトを出します。
ブートストラップの埋め込み UAC マニフェストの requestedExecutionLevel ノードで、次のようにインストールを現在のユーザーとして実行すること (asInvoker) が指定されます。
<requestedExecutionLevel level="asInvoker" />
ただし、必要であれば、アプリケーション インストールのアクセス許可を昇格させることができます。たとえば、Web セットアップ プロジェクトでインターネット インフォメーション サービス (IIS: Internet Information Services) の設定を変更するには管理者特権が必要で、グローバル アセンブリ キャッシュにアセンブリをインストールするにも同様です。必須コンポーネントのインストール後、アプリケーション インストールの前にアクセス許可昇格のプロンプトが出されます。
インストールのアクセス許可を昇格させるには、プロジェクト (.vdproj) ファイルを開きます。プロジェクト ファイルの MsiBootstrapper セクションで、RequiresElevation プロパティを True に設定します。このプロパティは、Visual Studio 統合開発環境 (IDE) を介して使用することはできません。したがって、プロジェクト ファイルを使用する必要があります。詳細については、「RequiresElevation プロパティ」を参照してください。
管理者援助によるアクセス許可昇格
Windows インストーラは、Windows Vista での管理者援助によるアクセス許可昇格をサポートします。このシナリオでは、管理者による資格情報を求めるプロンプトがユーザーに出され、管理者がユーザーのためにパスワードを入力します。このシナリオをサポートするには、コンピュータが Windows Vista 以降のバージョンの Windows 上で動作していれば、ブートストラップが AdminUser プロパティを True に設定します。
メモ : |
---|
UAC を使用しない Windows Vista がコンピュータで動作していて自分が管理者でない場合も、AdminUser が True に設定されることになります。したがって、.exe インストーラ (たとえば SQLExpress32.exe) の作成にあたっては、該当するアクセス許可を検出し、アクセス許可が不適切な場合は特定の終了コードを生成するようにする必要があります。この終了コードをキャッチし、管理者を必要とすることを示すメッセージを表示するように Setup.exe を作成する必要があります。 |
必須コンポーネントのアクセス許可の昇格
Windows Vista は、必要なときに必須コンポーネントのインストールのアクセス許可を昇格させます。Windows Vista が UAC 下で動作している場合、ブートストラップ自体はアクセス許可の昇格を行わず、アクセス許可を昇格させる必要のある必須コンポーネントごとにプロンプトを出します (その必須コンポーネントがまだインストールされていない場合)。パッケージのアクセス許可の昇格が失敗した場合、ブートストラップは失敗して適切なエラー メッセージを送信します。
カスタム動作のアクセス許可の昇格
カスタム動作エディタで作成されたカスタム動作は、昇格したアクセス許可で実行されます。カスタム動作は、レジストリやファイル システムなどのユーザー固有データにアクセスしないようにしてください。カスタム動作は呼び出しユーザーのアカウントで実行されるわけではないからです。
カスタム動作エディタでは NoImpersonate プロパティの既定の設定は True なので、カスタム動作は既定でアクセス許可が昇格して実行されます。NoImpersonate を False に変更すると、カスタム動作は呼び出しユーザーを偽装しますが、そのアクセス許可は不十分である場合があります。
Visual Studio のバージョン間の違い
Windows Vista UAC 下の Visual Studio 2005 セットアップ プロジェクトと Visual Studio 2008 セットアップ プロジェクトの動作にも違いがあります。
UAC 下で実行するとき、Windows Vista 組み込みインストーラが検出し、同意を求めるプロンプトを出します。Visual Studio 2005 で作成されたブートストラップ (Setup.exe) は、何をインストールするかにかかわらず、同意を求めるプロンプトを常に出します。Setup.exe とそのすべてのプロセスは Windows Vista の管理者トークンを使用して実行されるので、最終的なアプリケーションのインストールは昇格した特権で行われます。管理者援助によるアクセス許可昇格が設定された Setup.exe をユーザーが実行する場合、(管理者のプロファイルではなく) アクセス許可が昇格したユーザーのプロファイルでアプリケーションがインストールされます。
Visual Studio 2008 では Setup.exe の動作が変わり、開始時にアクセス許可の昇格を求めるプロンプトが出されません。アクセス許可昇格のプロンプトを出さないようにするために、要求実行レベルが asInvoker で Setup.exe が実行されるようにブートストラップの埋め込みマニフェストで指定されます。この方法には、最終的なアプリケーションのインストールはアクセス許可の昇格なしで実行され、必須コンポーネントのインストールは必要に応じてアクセス許可を昇格させることができるという利点があります。ブートストラップは、必須コンポーネントを起動するために ShellExecute を呼び出します。Windows Vista はこの呼び出しを受け取るとインストール検出を実行し、インストール前にユーザー プロンプトを出します。
この変更の欠点は、アプリケーション自体に加え、インストールする必要のある必須コンポーネントごとにもプロンプトが出されるということです。しかし、すべての必須コンポーネントがコンピュータに既に存在する場合は、インストールでプロンプトが出されることはありません。アクセス許可の昇格を必要とする外部チェックも行わないようにしてください。外部チェックは機能しますが、インストーラのプロンプトに加えて、外部チェックごとにアクセス許可昇格のプロンプトがユーザーに出されることになります。
参照
概念
Windows Vista の Windows インストーラ配置