@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Windowsインストーラーが「別のバージョンの製品が既にインストールされています。」と表示する条件

msiファイルをビルドしているとちょいちょい次のダイアログを見ます。

f:id:ledsun:20220131231715p:plain
「別のバージョンの製品が既にインストールされています。」ダイアログ

Product Idが同じ異なるmsiファイルを実行すると起きます。 何が「異なる」と表示されるのか特定出来ていませんでした。 msiファイルのMD5みたいなハッシュか、ファイルサイズか辺りかな?と予想していました。

今日、msiファイルをビルドしなおすと発生することに気がつきました。 WiX Toolsetでいうと、wxsファイルを全く変えずにlight.exeを使ってリンクし直すだけで発生します。

ユーザー毎コンテキストでインストールしたProductの情報はレジストリHKEY_CURRENT_USER\SOFTWARE\Microsoft\Installer\Productsに登録されます。 例えば WiX チュートリアル 日本語訳 Lesson 1 始めよう / 3. 使用に供する のSample-1-3-Firstで作成したmsiファイルを実行すると次の情報が登録されます。

f:id:ledsun:20220131234056p:plain
SampleFirst.msiでインストールした情報

一回アンインストールします。 light.exe .\SampleFirst.wixobjを実行し、msiファイルをつくりなおします。 あたらしいmsiファイルを使ってインストールすると、次の情報に変わります。

f:id:ledsun:20220131234147p:plain
SampleFirst.msiをビルドしなおしてインストールした情報

PackageCodeだけが変わっているのがわかります。

WiX チュートリアル 日本語訳 Lesson 1 始めよう / 1. ソフトウェア・パッケージ

Package の GUIDは、パッケージを生成するたびに違うものである必要があります。 事を簡単にし、新しい GUID を発行するのを忘れないようにするために、アスタリスクをタイプして WiX に GUID を自動生成させることが出来ます

この説明の意味がやっとわかりました。 「パッケージを生成するたび」というのはlight.exeを実行する度ということでした。