EternalWindows
MSI カスタムアクション編 / セットアッププロジェクト

今回は、Visual Studio 2002のセットアッププロジェクトを利用したMSIファイルの作成手順を示します。 セットアッププロジェクトには、フィーチャの設定を明示的にできないことや、 ファイルに階層構造を持たせれないなど、機能的に少ない部分がありますが、 簡単なインストーラーで済ませたい場合は便利な存在であるといえます。 なお、Visual Studio 2005や2008のExpress Editionバージョンには、 セットアッププロジェクトが含まれていないので注意してください。

まず、「新規作成」から「プロジェクト」を選択します。

次に、「セットアップ/デプロイメント プロジェクト」から「セットアップ プロジェクト」を選択します。

セットアッププロジェクトもWin32プロジェクトのようにプロジェクトフォルダという概念があり、 デフォルトではSetup1というフォルダが作成されます。 OKボタンを押すと次のような画面が表示されます。

セットアッププロジェクトには、エディタという概念があります。 上図で表示されているのは、ファイルシステムエディタで、 このエディタではインストーラーに含めるファイルを決定すると共に、 ファイルの配置先も決定します。 表示するエディタを変更するには、「表示」メニューの「エディタ」を選択するか、 ソリューションエクスプローラの横に並んだアイコンのいずれかを選択します。

今回作成するインストーラーは簡単なテストということで、 readme.txtとsample.exeという2つのファイルをインストールするものとします。 これらのファイルは事前に用意しておきます。 また、インストール先のフォルダは両方ともアプリケーションフォルダとします。 アプリケーションフォルダには、製品を構成する一連のファイルが格納されるのが一般的です。 アプリケーションフォルダは、ファイルシステムエディタのツリービューから参照可能で、 右クリックメニューから「プロパティウインドウ」を選択すると、 アプリケーションフォルダについての詳細な情報が得られます。

アプリケーションフォルダのパスは、TARGETDIRというプロパティで決定されることになります。 このプロパティは、インストール中でインストール先を決定するダイアログで入力した値となるため、 アプリケーションフォルダというのはユーザーに決定権があることになります。 ただし、DefaultLocationの[ProgramFilesFolder][Manufacturer]\[ProductName]から分かるように、 デフォルトのインストール先はProgram Filesフォルダ以下を対象としています。 [Manufacturer]や[ProductName]のような括弧でくくられた文字列はプロパティであり、 これらの値はソリューションエクスプローラのプロジェクト名を選択することで確認できます。

ManufacturerやProductNameはそれぞれ、製造元の名前と製品名を表しますから、 これらのプロパティは必ず独自に設定しておくようにします。 この他のプロパティも、「プログラムの追加と削除」に表示されるものがあるため、 できるだけ設定しておくとよいと思われます。

それでは、実際にファイルを追加する作業に入ります。 ファイルシステムエディタを表示し、アプリケーションフォルダ上で右クリックメニューを表示します。 そして、「追加」から「ファイル」を選択して、表示されたファイル選択ダイアログにてreadme.txtを追加し、 それを終えたら、今度はsample.exeを追加します。 2つのファイルを追加したことによって、ウインドウが次のように表示されていたら成功です。

一通りの追加作業を終えたら、いつものWin32プロジェクトのときのようにビルドを行います。 すると、プロジェクト名を名前としたMSIファイルが作成されますから、 後はこれを開けばインストールが開始されることになります。 セットアッププロジェクトは、Setup.exeというファイルも作成しますが、 これはMSIファイルをCD-ROMに配置する場合は便利な存在となります。 CD-ROMをセットしたときにアプリケーションを自動起動させるためには、 autorun.infに起動したいアプリケーションのファイル名を記述しますが、 ここには基本的に.exeの拡張子を持つファイル名しか指定できません。 Setup.exeは、Setup.iniを通じてMSIファイルの場所を特定してMSIファイルをオープンすると共に、 システムにWindows Installerがインストールされているかどうかのチェックも行います。 CD-ROMを利用する場合は、そのCDに対してGetVolumeInformationを呼び出し、 そこで取得したボリューム名をMSIファイルのMediaテーブルのVolumeLabelに設定しておきます。

アップグレードの設定

セットアッププロジェクトで既存製品のアップグレードを行いたい場合、 アップグレードに必要となるプロパティを正しく理解しておく必要があります。 まず、アップグレードを行うには、既にインストールされている製品と、 今作成しようとしている製品、つまりアップグレード版の製品のUpgradeCodeを同一にしておかなければなりません。 また、ProductCode、ProductVersion、PackageCodeの3つのプロパティは、 インストール済みの製品と異なっていなければなりません。 ただし、これはプロパティウインドウでVersion(ProductVersionに相当)の値を変更しようとすると同時に、 ProductCodeとPackageCodeの自動変更を促されるので、設定し忘れることはないでしょう。 MSIの仕様としては、上記のプロパティの値が適切であればアップグレードを行えることになりますが、 セットアッププロジェクトではさらに、特有のプロパティであるRemovePreviousVersionsをTRUEにしておきます。 これにより、旧バージョンのアンインストール処理が自動で行われます。



戻る