●「パッケージ・プロジェクト」の作成
ここからは、先ほどインストールしたBootstrapper Manifest Generatorを使っていくので起動してほしい。
初めは、製品マニフェストとパッケージ・マニフェストを生成するためのプロジェクト(以降、パッケージ・プロジェクト)を新規に作成する。ここでは「SampleBootstrapper」というプロジェクトを作成してみよう。具体的な作成手順は、次の画面を参照してほしい。
Bootstrapper Manifest Generatorにおけるプロジェクトの新規作成
先ほどインストールしたBootstrapper Manifest Generatorを起動して、「SampleBootstrapper」という名前の新規プロジェクトを作成しているところ。
(1)ツールバー上の[New Project]ボタンをクリックする(もしくはメニュー・バーから[File]−[New]を選択する)。これにより[New Project]ダイアログが表示される。
(2)[Project Types]一覧から「Package Manifest」という項目を選択する。
(3)[OK]ボタンをクリックする。すると[New Project - Package Manifest]というMDI子ウィンドウが表示される。
(4)プロジェクトの名前(Project Name)を「SampleBootstrapper」に設定する。
(5)さらにプロダクト・コードも設定しておこう。プロダクト・コードは通常、会社名とプロダクト名とバージョン番号がドット(.)で区切られたようなフォーマットにする。本稿では「DigitalAdvantage.SampleBootstrapper.1.0」とした。
●パッケージ・プロジェクトへの「インストール・ファイル」の追加
次に、パッケージ・プロジェクト内にインストール・ファイルを作成する。インストール・ファイルとは、前述の3の再配布可能コンポーネントに該当するファイルのことだ。本稿では、先ほど作成した「Setup1.msi」をインストール・ファイルとして追加する。
具体的な追加手順は、次の画面のとおりだ。
パッケージ・プロジェクトへのインストール・ファイルの追加手順
必須コンポーネントとしてユーザー環境にインストールしたいファイルを追加する。
(1)(MDI子ウィンドウの)ツールバー上の[Add Install File]ボタンをクリックして[AddFile]ダイアログを開く。
(2)「All Languages」(=neutral)を選択する。ちなみに複数言語に対応する必須コンポーネントを作成する場合は、すべての言語で個別にインストール・ファイルを追加して、それぞれのファイルに対してここで言語を選択すればよい。
(3)[Filename]欄にインストール・ファイルの名前を入力する。右にある[Browse]ボタンをクリックすれば、[ファイルを開く]ダイアログを使ってインストール・ファイルを選択できる。本稿では、先ほど作成したセットアップ・ファイルの「C:\SampleBootstrapper\Setup1.msi」を指定した。
(4)[OK]ボタンをクリックする。これにより、「Package」の直下に「Setup1.msi (neutral)」という項目が追加される。そこで「SampleInstaller (neutral)」を選択した状態で[Install File]ページの設定内容を入力する。
(5)[Display Name]に任意のインストール・ファイルの名前を入力する。本稿では「GAC用アセンブリのインストーラ」と入力した。
(6)[File Name]には先ほどの[AddFile]ダイアログの[Filename]欄に入力した内容が自動的に設定される。
(7)[Language Name]には、[AddFile]ダイアログで「All Langages」を選択した場合、「neutral」が自動的に設定される。
(8)さらにそのファイルがWeb上に配置されている場合は、[Properties]タブの[HomeSite URL]にそのURLを入力しておこう。本稿では「http://localhost/SampleBootstrapper/Setup1.msi」と入力したが、(筆者の環境では)実際にこのURLからこのセットアップ・ファイルをダウンロード可能である。なお、これを指定しない場合、ClickOnceの必須コンポーネントの設定で「必須コンポーネントをコンポーネントの開発元の Web サイトからダウンロードする」というオプションは選べなくなる(選んだとしても発行するときに「アプリケーションと同じ場所から必須コンポーネントをダウンロードする」に強制的に変更される)。
以上により、インストール・ファイルが登録できた。次に、このインストール・ファイルが実際に実行される際の条件を定義していこう。
●GACコンポーネントをチェックする「プロパティ」の定義
本稿の例では、アセンブリをユーザー環境のGACに登録するが、そのアセンブリがすでにGACにインストール済みかどうかを調べる必要がある。これを行うのが、[System Checks]ページだ。
次の画面は、GACにアセンブリがインストールされているかどうかをチェックするためのプロパティを定義しているところだ。
GACコンポーネントをチェックするプロパティの定義
GACにインストール済みかどうかを調べるには、[System Checks]でプロパティを定義する。
(1)[System Checks]タブをクリックしてページを開く。
(2)ツールバー上の[Assembly GAC Check]ボタンをクリックして、「GACCheck」というプロパティ項目を追加し、それを選択する。
(3)チェックしたGACのバージョンを取得するためのプロパティ名を指定する。この例では、「CLASSLIBRARY1_VER」を入力した。
(4)[File]ボタンをクリックしてGACにインストールするアセンブリを選択する(本稿の例では「ClassLibrary1.dll」ファイルを選択した)。これにより、アセンブリの厳密名に関する情報が、その下にある[Assembly Identity]の欄に自動的に入力される。ちなみに、[GAC]ボタンをクリックした場合は現在使用しているコンピュータのGACコンポーネントの中から選択できる。*3
*3 この例では[Assembly Identity]の[Processor Architecture]には「MSIL」が指定されているが、実際には「msil」と小文字で指定しなければならない。これはソフトウェアの不具合のようだ。現時点では手動で小文字を入力して保存し直す、もしくは出力された製品ファイル/パッケージ・ファイルを修正するしかないだろう。しかしBootstrapper Manifest Generatorで[System Checks]ページを再び開いてしまう元の大文字に戻ることがあるので注意が必要である。
この画面の例では「CLASSLIBRARY1_VER」というプロパティを定義しているが、このプロパティからインストール済みのアセンブリ(ClassLibrary1.dllファイル)のバージョンが取得できる。このプロパティに実際にアクセスして、インストールを行う/行わないの判定を行うのが、次に説明する[Install Conditions]ページである。
●インストール済みかどうかを判定するための「インストール条件」の定義
先ほど作成したCLASSLIBRARY1_VERプロパティをチェックして、インストール済みか(=コンポーネントをインストールしないか)、まだインストールされていないか(=コンポーネントをインストールするか)というインストール条件を定義する。
具体的には、次の画面のようにしてプロパティの値を比較することで条件判定を行う。
インストール済みかどうかを判定するための「インストール条件」の定義
CLASSLIBRARY1_VERプロパティをチェックして、インストール済みか(=コンポーネントをインストールしないか)、まだインストールされていないか(=コンポーネントをインストールするか)を[Install Conditions]ページで定義する。
(1)「ByPassIf」を指定する(詳細後述)。
(2)先ほど作成したプロパティ「CLASSLIBRARY1_VER」をコンボボックスから選択する。
(3)コンボボックスから「>=」を選択する。
(4)現在作成中の必須コンポーネントと同じバージョンを入力する。
(5)この欄は「FailIf」の場合にのみ有効。インストールできない理由をメッセージ・テキストとして記述する。このメッセージはユーザーに通知される。
(6)この欄は条件を評価するタイミング(=スケジュール)を指定するためのものだと思われるが、「(Default)」という値以外は入力できないようだ。
上記の[Type]欄で指定できる値の意味は、次のとおりだ。
- ByPassIf:条件を満たしていると判定し、インストール作業をバイパスする(=省略する)
- FailIf:条件の範囲外だと判定し、インストール作業を中断する
つまり上の画面の設定では、CLASSLIBRARY1_VERプロパティの値が「1.0.0.0」以上なら、インストール済みと見なしてインストールを省略するようにしたわけである。
取りあえずここで再度すべてを保存しておこう。