Visual Studio インストーラーの配置

Windows インストーラー配置を使用すると、ユーザーに配布するインストーラー パッケージを作成できます。ユーザーはセットアップ ファイルを実行し、ウィザードの手順を実行することによって、アプリケーションをインストールできます。 これを実現するには、ソリューションにセットアップ プロジェクトを追加します。 プロジェクトをビルドすると、ユーザーに配布するセットアップ ファイルが作成されます。ユーザーはセットアップ ファイルを実行し、ウィザードの手順を実行することによって、アプリケーションをインストールできます。

Microsoft Windows インストーラーは、Windows オペレーティング システムに付属するデータ ドリブン インストール構成サービスです。 Windows インストーラーでは、インストールされるすべてのアプリケーションに関する情報 (ファイル、レジストリ キー、コンポーネントなど) についてのデータベースが保持されています。 アプリケーションをアンインストールする場合は、削除する前にデータベースを確認し、削除しようとするファイル、レジストリ キー、またはコンポーネントにほかのアプリケーションが依存していないことを確認します。 このように確認することによって、あるアプリケーションを削除してもほかのアプリケーションに悪影響を及ぼさないようにできます。

注意

Express Edition には Windows インストーラー テクノロジが含まれていません。 Express Edition で使用されている配置テクノロジについては、「ClickOnce のセキュリティと配置」を参照してください。

Windows インストーラーに用意されている機能と共に Visual Studio の配置ツールを使用すると、アプリケーションを配置および保守できます。

インストーラー パッケージの作成

アプリケーションおよびその必要条件を配置するには、インストーラー パッケージを使用する必要があります。 通常、アプリケーションは .NET Framework、SQL Server Express、またはカスタム EXE あるいは DLL に依存しています。 ただし、アプリケーションが依存する特定のバージョンの .NET Framework またはその他の依存関係が、エンド ユーザーのコンピューターに存在するかどうかは明確ではありません。 そのため、エンド ユーザーのコンピューターにアプリケーションをコピーすることは推奨されていません。

インストール先

エンド ユーザーは、Web、CD、ネットワーク ファイル共有、またはその他の方法でアプリケーションをインストールできます。 インストール場所は、使用できるプロジェクト テンプレートに影響します。 たとえば、エンド ユーザーが Web からインストールできるようにする場合は、Web セットアップ プロジェクト テンプレートを使用できます。 CD またはネットワークからインストールするには、セットアップ プロジェクト テンプレートを使用します。 配置プロジェクト テンプレートの詳細については、「セットアップ/配置プロジェクト」を参照してください。

ファイルとフォルダー

ファイル システム エディターを使用すると、配置ファイルのインストール先とインストール方法を制御できます。 ファイル システムの構成やフォルダー名は、コンピューターによって異なる場合があります。ファイル システム エディターは、抽象フォルダーという概念を使用して、意図したとおりの場所にファイルをインストールします。 詳細については、「配置でのファイルのインストール管理」を参照してください。

仮想フォルダーは、Windows のシステム フォルダーを表しています。 たとえば、[デスクトップ フォルダー] はシステム フォルダーの [デスクトップ] に相当します。 Windows はシステム フォルダーの場所を追跡しているので、フォルダーの配置場所とフォルダー名にかかわらず、[デスクトップ フォルダー] に収められているファイルは、最終的に必ず [デスクトップ] システム フォルダーに格納されます。 詳細については、「特別なフォルダーとカスタム フォルダー」を参照してください。

開発者が独自のフォルダーを作成し、任意のシステム フォルダーの下に作成したフォルダーを置くこともできます。 たとえば、[アプリケーション フォルダー] の下に [アプリケーション データ] フォルダーを作成できます。[アプリケーション フォルダー] がターゲット コンピューターのどこにあっても、[アプリケーション データ] に入っているファイルは、相対的な位置が同じ場所に必ずインストールされます。 詳細については、「方法 : ファイル システム エディターでフォルダーを追加および削除する」を参照してください。

ファイル システム エディター内のフォルダーには、ファイル、プロジェクト出力、およびアセンブリを格納できます。 プロジェクト出力は、ソリューション内のほかのプロジェクトに含まれている項目を表し、主要なビルド出力 (実行可能ファイルなど)、ローカライズされたリソース、シンボリック デバッグ情報、コンテンツ ファイル (HTML ページなど)、およびプロジェクト ソース ファイルが含まれる場合があります。 これらの出力は、それぞれがプロジェクト出力グループと呼ばれます。プロジェクト出力グループには、基本出力 (キー出力とも呼ばれる) と共にすべての追加出力と依存関係が含まれます。 詳細については、「方法 : ファイル システム エディターでプロジェクト出力を追加および削除する」および「方法 : 配置プロジェクトに項目を追加する」を参照してください。

さらに、Condition プロパティを使用することで、ファイルやフォルダーに条件を設定できます。 これにより、インストール時にターゲット コンピューターに存在する条件に基づいて、ファイルのインストールをカスタマイズできます。 たとえば、ターゲット コンピューターのオペレーティング システムのバージョンに基づいて、インストールするファイルを選択できます。 詳細については、「Condition プロパティ」を参照してください。

ファイル システム エディターは、ショートカットの作成もサポートしており、あるフォルダーに置いたファイルをデスクトップまたは別のフォルダーにあるショートカットから指し示すことができます。 詳細については、「方法 : ファイル システム エディターでショートカットを追加および削除する」を参照してください。

[ファイルの関連付け]

アプリケーションを配置するときは、多くの場合、そのアプリケーションにファイルの種類を関連付けます。 たとえば、配置するアプリケーションが .myfile という拡張子のファイルを作成および使用する場合は、.myfile というファイルの種類にアプリケーションを関連付けて、ユーザーが .myfile ファイルをダブルクリックしたときに、そのアプリケーションによって開かれるようにすることができます。

Visual Studio の配置ツールに含まれるファイルの種類エディターを使用すると、ドキュメントの種類を指定してファイル拡張子と関連付けることができます。 さらに、各ドキュメントの種類に対する動詞つまりアクションを指定したり、ブラウザーで使用できるようにドキュメントの種類に対する MIME タイプを指定したりできます。 詳細については、「配置でのファイル種類の管理」を参照してください。

インストールのときには、ファイルの種類エディターで指定した設定が、配置先のコンピューターで更新されます。

レジストリ

多くの場合、アプリケーションを配置するときには、レジストリにアクセスしたり、レジストリ値を設定したり、レジストリ キーを作成したりする必要があります。 Visual Studio の配置ツールには、この機能が用意されています。

Visual Studio のレジストリ エディターでは、Windows レジストリ エディターと同じように、配置先コンピューターのレジストリが階層的に表示されます。 標準のレジストリ ルートが示されます。 既存キーの値の変更、新規キーへの値の追加、および既定キーの指定を行うことができます。 詳細については、「配置でのレジストリ設定管理」を参照してください。

インストール中には、レジストリ エディターで指定したキーと値が、配置先コンピューターのレジストリに書き込まれます。

さらに、Condition プロパティを使用することで、レジストリ キーまたは値に条件を設定できます。 これにより、インストール時にターゲット コンピューターに存在する条件に基づいて、レジストリをカスタマイズできます。 たとえば、ターゲット コンピューターのオペレーティング システムのバージョンに基づいて、レジストリの値を変更できます。

Authenticode 署名

ユーザーがアプリケーションやコンポーネントの発行者と安全性を確認できるように、アプリケーションやコンポーネントに署名できます。 Web ブラウザーでダウンロードする Cab ファイルとインストーラーには、署名することをお勧めします。

Visual Studio の配置ツールでは、Microsoft Authenticode テクノロジを使用して、インストーラー、マージ モジュール、または Cab ファイルに署名できます。 アプリケーションまたはコンポーネントに署名するには、最初にデジタル証明書を取得する必要があります。

Authenticode 署名を使用するには、署名されている ClickOnce マニフェストを配置プロジェクトで有効にする必要があります。 詳細については、「[署名] ページ (プロジェクト デザイナー)」を参照してください。

グローバル アセンブリ キャッシュ

グローバル アセンブリ キャッシュは、.NET Framework に用意されているコード キャッシュであり、複数のアプリケーションで共有する必要のあるアセンブリを格納するために使用します。 グローバル アセンブリ キャッシュにアセンブリをインストールするには、アセンブリに厳密な名前が必要です。この名前により、アプリケーションまたはコンポーネントに一意の ID が割り当てられます。この ID は、そのアプリケーションまたはコンポーネントを他のソフトウェアで明示的に識別および参照する場合に使用できます。 詳細については、「方法 : アセンブリに署名する (Visual Studio)」を参照してください。

グローバル アセンブリ キャッシュにアセンブリをインストールするには、アセンブリ、またはアセンブリのプロジェクト出力グループをファイル システム エディター[グローバル アセンブリ キャッシュ] フォルダーに追加します。 このエディターを開くには、[表示] メニューの [エディター] をポイントし、[ファイル システム エディター] をクリックします。

[グローバル アセンブリ キャッシュ] フォルダーは、ファイル システム エディターの他のフォルダーとは異なります。 このフォルダーに設定できるプロパティはありません。また、このフォルダー、またはこのフォルダー内のアセンブリへのショートカットを作成することもできません。

必須コンポーネントの選択

アプリケーションを正しく配置するためには、アプリケーションが参照するすべてのコンポーネントも配置する必要があります。 たとえば、Visual Studio で作成されたアプリケーションのほとんどは、.NET Framework に依存します。 アプリケーションのインストール前に、必要なバージョンの共通言語ランタイムがターゲット コンピューターに存在しなければなりません。 Visual Studio の配置ツールを使用して、.NET Framework およびその他のコンポーネントも含めてインストールすることができます。 必須コンポーネントのインストール プロセスを、ブートストラップともいいます。

詳細については、「方法 : Windows インストーラー配置で必須コンポーネントをインストールする」を参照してください。

管理者特権でのインストール

管理用インストールとは、アプリケーションのソース イメージをネットワーク共有にインストールするための Microsoft Windows インストーラーの機能です。 ネットワーク共有にアクセスできるワークグループのユーザーは、ソース イメージからアプリケーションをインストールできます。

管理者が /a オプションを伴うコマンド ライン (msiexec /aインストーラー名) を使用してネットワーク共有にアプリケーションをインストールするときには、インストール ダイアログ ボックスが表示されます。ユーザー インターフェイス エディターを使用すると、このときに表示される一連のインストール ダイアログ ボックスを指定できます。 詳細については、「配置でのユーザー インターフェイスの管理」を参照してください。

注意

管理用インストールによってアプリケーションをインストールする場合は、Bootstrapper プロパティが Windows Installer Bootstrapper に設定されていても、ブートストラップ アプリケーション ファイル (必要に応じて Windows インストーラーをインストールするファイル) はサーバーにコピーされません。 インストールにブートストラップ アプリケーション ファイルが必要な場合は、Instmsia.msi、Instmsiw.msi、Setup.exe、および Setup.ini の各ファイルを手動でサーバーにコピーする必要があります。 これらのファイルは、アプリケーションの .msi ファイルと同じディレクトリにあります。

詳細については、「管理用インストール (Windows インストーラー)」にある Windows インストーラー SDK のドキュメントを参照してください。

Windows と昇格

Windows インストーラー テクノロジは、Windows Vista および Windows 7 の各オペレーティング システムへのソフトウェア インストールをサポートします。 エンド ユーザーのコンピューターがユーザー アカウント制御 (UAC: User Account Control) 下で動作しているときでも、アプリケーションをインストールするユーザーにプロンプトが表示されるのは、アクセス許可の昇格を必要とする個々のコンポーネント インストールについてのみです。

アプリケーションのアクセス許可の昇格

通常、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 7 での管理者援助によるアクセス許可昇格をサポートします。 このシナリオでは、管理者による資格情報を求めるプロンプトがユーザーに出され、管理者がユーザーのためにパスワードを入力します。 このシナリオをサポートするには、コンピューターが Windows Vista 以降のバージョンの Windows 上で動作していれば、ブートストラップが AdminUser プロパティを True に設定します。

注意

UAC を使用しない Windows Vista がコンピューターで動作していて自分が管理者でない場合も、AdminUser が True に設定されることになります。 したがって、.exe インストーラー (たとえば SQLExpress32.exe) の作成にあたっては、該当するアクセス許可を検出し、アクセス許可が不適切な場合は特定の終了コードを生成するようにする必要があります。 この終了コードをキャッチし、管理者を必要とすることを示すメッセージを表示するように Setup.exe を作成する必要があります。

必須コンポーネントのアクセス許可の昇格

Windows Vista と Windows 7 は、必要に応じて必須コンポーネントのインストールのアクセス許可を昇格させます。 Windows Vista または Windows 7 が UAC 下で動作している場合、ブートストラップ自体はアクセス許可の昇格を行わず、アクセス許可を昇格させる必要のある必須コンポーネントごとにプロンプトを表示します (その必須コンポーネントがまだインストールされていない場合)。 パッケージのアクセス許可の昇格が失敗した場合、ブートストラップは失敗して適切なエラー メッセージを送信します。

カスタム動作のアクセス許可の昇格

カスタム動作エディターで作成されたカスタム動作は、昇格したアクセス許可で実行されます。 カスタム動作は、レジストリやファイル システムなどのユーザー固有データにアクセスしないようにしてください。カスタム動作は呼び出しユーザーのアカウントで実行されるわけではないからです。

カスタム動作エディターでは NoImpersonate プロパティの既定の設定は True なので、カスタム動作は既定でアクセス許可が昇格して実行されます。 NoImpersonate を False に変更すると、カスタム動作は呼び出しユーザーを偽装しますが、そのアクセス許可は不十分である場合があります。

Visual Studio のバージョン間の違い

UAC 下では、Visual Studio 2005 セットアップ プロジェクトと Visual Studio 2008 セットアップ プロジェクトの動作にも違いがあります。

UAC 下で実行するとき、Windows Vista または Windows 7 の組み込みインストーラーが検出し、同意を求めるプロンプトを表示します。 Visual Studio 2005 で作成されたブートストラップ (Setup.exe) は、何をインストールするかにかかわらず、同意を求めるプロンプトを常に表示します。 Setup.exe とそのすべてのプロセスは Windows Vista と Windows 7 の管理者トークンを使用して実行されるため、最終的なアプリケーションのインストールは昇格した特権で行われます。 管理者援助によるアクセス許可昇格が設定された Setup.exe をユーザーが実行する場合、(管理者のプロファイルではなく) アクセス許可が昇格したユーザーのプロファイルでアプリケーションがインストールされます。

Visual Studio 2008 と Visual Studio 2010 の Setup.exe では、起動時にアクセス許可の昇格を求めるプロンプトは表示されません。 アクセス許可昇格のプロンプトを出さないようにするために、要求実行レベルが asInvoker で Setup.exe が実行されるようにブートストラップの埋め込みマニフェストで指定されます。 この方法による利点は、最終的なアプリケーションのインストールをアクセス許可の昇格なしで実行し、必須コンポーネントのインストールは、必要に応じて、アクセス許可を昇格させて実行できるということです。 ブートストラップは、必須コンポーネントを起動するために ShellExecute を呼び出します。 Windows Vista または Windows 7 は、この呼び出しを受け取るとインストール検出を実行し、インストール前にユーザー プロンプトを表示します。

この変更の欠点は、アプリケーション自体に加え、インストールする必要のある必須コンポーネントごとにもプロンプトが出されるということです。 しかし、すべての必須コンポーネントがコンピューターに既に存在する場合は、インストールでプロンプトが出されることはありません。 アクセス許可の昇格を必要とする外部チェックも行わないようにしてください。 外部チェックは機能しますが、インストーラーのプロンプトに加えて、外部チェックごとにアクセス許可昇格のプロンプトがユーザーに出されることになります。

参照

処理手順

セットアップ プロジェクトと配置プロジェクトのトラブルシューティング

参照

配置のエラーとサポート

概念

セットアップ/配置プロジェクト

その他の技術情報

アプリケーションとコンポーネントの配置

配置エディター

配置のタスクとチュートリアル

配置のダイアログ ボックス

配置のサンプルとチュートリアル