Lesson 4 アップグレードとモジュラー化
前回のレッスンを終って、インストーラ・パッケージに関する限りでは、考えられる全てのことについて、やり方を学びました。 そうですよね? 結局の所、Windows Installer が直接的な解決を提供してくれない場合でも、 昔なじみの信頼できるコンパイラに点火して自分で書けば良いのだ、と。そうですよね?
ある意味ではその通りです。しかし、ある意味ではそうではありません。 私たちは元のインストーラ・パッケージを作る方法は知っていますが、アップグレードを出荷するとなったら何をすればよいのでしょうか? あるいは、パッチは? ユーザーに前のバージョンをアンインストールして新しいのを再インストールしてくれるように頼むのでしょうか? そして、ユーザーがソフトウェアを使っている間に設定したデータはどうなるのでしょう? 最初から全部をやり直してもらうのでしょうか?
もちろん、そうではありません。 と言うわけで、Windows Installer がそういう問題を解決するのにどのような支援をしてくれるのか、見ていきましょう。 Windows Installer は、製品の変更を三つのカテゴリに分けています。
-
スモール・アップデート は、一つまたは少数のファイルに対する小さな変更で、製品のバージョン (major.minor.build) を変更すべき理由が無いものを意味します。 Product GUID も変更する必要はありません。
しかし、どんな点であれ、前のものと異なる
.msi
ファイルを作成する場合は、 常に Package GUID を変更しなければならない、という事に注意して下さい。 Windows Installer は、インストールされたプログラムを追跡して記録し、 ユーザーがインストールを変更または削除しようとしたときに、該当するプログラムを探し出すために GUID を使用します。 違うパッケージに同じ GUID を使用すると、Windows Installer を混乱させることになります。 - マイナー・アップグレード は、製品のバージョンが変るほどの変更を意味します。 Product タグの Version 属性を修正して下さい。 製品は変りませんので Product GUID は変更する必要がありませんが、もちろん、Package GUID は新しいものを生成して下さい。
- メジャー・アップグレード は、あるメジャー・バージョンから別のメジャー・バージョンへ、というような大幅な変更を意味します。 Version 属性、Product GUID、Package GUID の全てを変更して下さい。
メジャー・アップグレードを使うこと(換言すると、Product GUID を変更すること)を
Windows Installer が強要する場合がいくつかあります —
古いバージョンと新しいバージョンをユーザーのコンピュータに共存させたい場合。
どんな理由であれ、.msi
ファイルの名前を変更する場合。
パッケージに含まれるどれかの Component の GUID を変更する必要がある場合。
コンポーネントを削除した場合。
機能の階層構造に何らかの変更がある(子の機能が親から出て行ったり、親の機能が新しい子を追加したりする)場合 —
これらの場合には、メジャー・アップグレードにしなければなりません。
という訳で、メジャー・アップグレードは輪郭がはっきりしていますが、 スモール・アップデートとマイナー・アップグレードの境界線はいくらか不鮮明です。 それについては、こういう風に考えて下さい。 将来の製品において、現在のバージョンと新しいバージョンを区別する必要が少しでもあるなら、マイナー・アップグレードに一票を投じましょう。 そして、いつものように、間違うなら安全な側に間違う方が良いですね。
GUID を変更するときは、古いのを記録しておいて下さい。 Windows Installer の精巧なアップグレード機能を使う時に、前の GUID が必要になります。