2015年11月2日月曜日

VisualStudio の Install ShieldLimited Edition 2013 でアップデートインストール

Visual Studio 2013 でインストーラを作成する方法の一つに、Install Shield Limited Edition (以下、ISLE と略します)があります。 まだ使っていないという方の入り口としては、マイクロソフトさんのこのページあたりからたどるといいでしょうね。

で、インストールプロジェクトをこさえて、インストーラをビルドするまでの方法については、あちこちにまとめられたページが公開されていますので、わざわざ重複して紹介するまでもないでしょう。
と、いうことで入門から初回ビルドまでの情報についてはここでは記載しません。

インストーラをリリースした後でソフトウェアをバージョンアップしたインストーラを作成すると、そのままでは、以前のバージョンをコントロールパネルからアンインストールして新しいバージョンのインストーラを起動しなければならなくなってしまいます。
(じっさい、困ってしまいましたよw)

そこで、自動的にアップデートインストールできるような ISLE の設定方法をまとめることにしました。

1.ソフトウェアのバージョン情報
アプリケーションプロジェクトの[Properties]タブの[アセンブリ情報(I)...]ボタンを押すと、プロダクトのバージョン情報が表示されます。
アプリケーションのアセンブリ情報画面
この「アセンブリバージョン」「ファイルバージョン」にアプリケーションのバージョン情報を定義します。
バージョンアップの際は、この情報をより大きい数値に変えることになります。
バージョン情報 1.0.0.0 だったアプリケーションを 1.1.0.0 にバージョンアップする場合を例にとってみます。
バージョンを 1.0.0.0 から 1.1.0.0 にアップ


2.セットアッププロジェクトの構成
ここで、セットアッププロジェクトのバージョンもアップします。

現在のバージョン情報である、[Product Version]の部分を 1.00.0000 から 1.10.0000 に変更します。
このとき、その直後の [Product Code]も変更する必要があります。
[Product Code]の部分をクリックすると、右側に { } ボタンが現れますから、ここをクリックしてGUIDを再度生成します。

ここまでの設定でインストーラを構築した場合、すでに 1.00.0000 のバージョンがインストールされたコンピュータでインストーラを起動すると、プロダクトコードが異なるために、別のアプリケーションとしてインストールされてしまいます。つまり、同じアプリケーションが重複してインストールされてしまうことになります。
インストーラがそれ以前の過去のバージョンを自動的に削除してから新しいプロダクトをインストールできるようにするには、[Product Code]の次の行に記述されている[Upgrade Code]が関係してくることになります。

あ。ちょっと待って!
[Upgrade Code]の部分もクリックすると右側に { } ボタンが出現して新しいGUIDに更新できるようになっていますが、ここを変更してはいけません。

アップグレードインストールが正しく動作するようにするには、左側のツリーメニューにある、[Upgrade Paths]の部分を編集します。

Upgrade Paths の画面はこのようになっています。
ツリーの Upgrade Paths を右クリックして、「New Upgrade Path...」メニューを選択します。


ファイル選択ダイアログが表示されますが、「キャンセル」ボタンで閉じると、新しいアップグレードエントリが作成されています。


アップグレードの新しいノードには「Upgrade」のような名前を付けます。
プロパティの Max Version 部分には、新しく設定されたバージョン 1.10.0000 が表示されています。
その下の Include Max Version は、アップグレードの際に以前のバージョンを削除する最大バージョン情報を含めるかどうかを示しています。
ここは「No」を設定するほうがいいのかな、と思っています。


これで、アップグレードインストーラの完成です。

プロジェクトの [Upgrade Code] のGUIDを変更してしまった場合は、アップグレードノードを追加して、古いバージョンの Upgrade Code をセットアップ時の削除対象に追加する必要があります。
このとき、以前ビルドしたプロジェクトファイルのバックアップがないと、以前リリースした Upgrade Code を入手できなくなりますので、注意してください。

ISLEにはずいぶんと泣かされましたw
その他、苦労した部分についてもいずれ書けたらいいなと思ってるところです。

ではでは。


0 件のコメント:

コメントを投稿