redwarrior’s diary

C#, ASP.NET, WEB, G*などの雑多な情報

(小ネタ)Visual Studio Installer Projectsを使用し、アップデートに対応したインストーラーを作成する

Visual Studio Installer Projects拡張機能を使用すると、インストーラーを作成するためのプロジェクト(Setupプロジェクト)を作成できるようになる。

アプリケーションを更新するたびに、古いバージョンをアンインストールして、新しいバージョンをインストールするのは、ユーザーにとって手間なので、アップデートに対応したインストーラーを作成したい。

インターネットで調べるとやり方はヒットするのだが、なぜそのやり方になるのかという理由がなかなか見つからなかったので、調べた結果を残しておく。

アップデートの分類

デスクトップアプリケーションのアップデートは、3種類(Small Update、Minor Upgrade、Major Upgrade)に分類されている。

参考サイト:セットアッププロジェクトによるアップデート - .NET Tips (VB.NET,C#...)

アプリケーションのバージョンアップと言われたら、大体Minor Upgradeか、Small Updateを想定するだろう。

Major Upgrade以外は非対応

しかし、様々なサイトを見てみると、Major Upgradeのやり方ばかり書いてある。

これはなぜかというと、Setupプロジェクトで作成できるインストーラーは、ProductCode が同じままバージョンアップする方法(Minor Upgrade/Small Update)に対応していないからである。

参考サイト:Re[2]: msi作成について

ProductCode を変えずにインストーラーを作成すると、実行時に以下のメッセージが表示される。

f:id:redwarrior:20210216104807p:plain

Major Upgradeの設定のコツ

Major Upgradeは過去のバージョンと共存できることを想定しているため、同じフォルダを指定してインストールをしても、「プログラムと機能」に古いバージョンと新しいバージョンの両方のアプリケーションが表示されてしまう。

このため、SetupプロジェクトのRemovePreviousVersionsプロパティをTrueにして、古いバージョンをアンインストールすることで、アップデートしたように見せている。

以上