WiX 3.5 を使用して、インスタンス トランスフォームを備えた MSI を使用して、異なる製品名で同じマシンにソフトウェアをインストールできるようにしました。これを行うために、条件付きで定義された .wxs ファイルに製品 ID と名前の「ハードコーディングされた」リストがあります。ただし、ファイル リソースと非ファイル リソースの両方を含む単一の Feature-ComponentRef 定義しかありません。
インストールは正常に機能しているように見えますが、インスタンスをアンインストールすると、次の 2 つのソースで言及されている動作が示されます。
http://msdn.microsoft.com/en-us/library/aa367797(v=VS.85).aspx
と
具体的には、アプリケーションの最後のインスタンスを除いて、ファイル以外のリソース (この場合はレジストリ エントリ) がアンインストールされることはありません。(つまり、instance1、instance2、instance3 の順にアンインストールすると、instance3 のファイル以外のリソースのみが削除されます。
これは、ファイル以外のコンポーネントに一意の GUID がないことに関連していると推測しています (ファイル コンポーネントでは問題になりません)。
したがって、有効なアプローチは、1 つの製品 ID、名前、および 1 つの機能セットを含む単一の .wxs ファイルを定義することであるかどうか疑問に思っていましたが、カスタム ブートストラップに、製品および非ファイル コンポーネントの新しい GUID を生成させ、それを挿入します。実行時に MSI データベースに? つまり、その後、アンインストールまたは更新するときが来たら、インストールされたインスタンスのレジストリを照会し、それらの GUID を取得します。
これにより、事前に .wxs にハードコーディングするのではなく、実行時にインスタンスを作成し、クリーンにアンインストールすることができます。
それは理にかなっていますか?バーンはすべてを良くしますか? :)