同じComponentIdでモジュールを更新する際の問題

私のインストールには特定のファイルのセットがあり、それは異なる製品/製品のバージョンで繰り返されます。



当然、wix上に構築するプラグインとして作成しました。 状況により、さまざまなインストールの一部のモジュールが同じComponentIdを持つことが判明しました。

製品には異なるProductId / UpgradeCodeがあり、コンポーネントの追跡はProductId.ComponentIdバンドルを使用して実行されるため、これは許可されているようです。 これは、Wix開発者ブログの1つで明確に一度に明確にされました。



しばらくして、非定型のバグがテスターから流れ始めました。ほとんどの場合、この繰り返しセットからモジュールを更新すると問題が明らかになりました。





つまり 例えば:



製品Aには、バージョン3.0.2のsymbols.dllモジュールがあります

製品Bには、バージョン3.0.2のsymbols.dllモジュールがあります



両方の製品が最初にインストールされ、次にBがインストールされます。

ビルドの新しいバージョンでアップデートがリリースされます。 つまり



製品A-バージョン3.0.3のsymbols.dllモジュール

製品B-バージョン3.0.3のsymbols.dllモジュール



製品Bをアップグレードすると、製品Aになります。

Bのモジュールはそれ自体に対して完全に更新されますが、製品Aでは変更されません。

インストールログには、モジュールの更新が必要であると記載されていますが、更新は行われません。



blogs.msdn.com/b/astebner/archive/2005/07/01/で説明されている方法を使用して、 msi-inv-to-gather-information-about-is-installed-on-a-computer.aspxの情報を取得しました製品ごとに驚きました。



{E014B150-1444-4641-A21C-DB27C4F3CB40} (共有) (ローカル)

パス:C:\ Program Files(x86)\ companyname \ Product B \ 1.0 \ bin \ symbols.dll

バージョン: 3.0.3

所有者:NT AUTHORITY \ SYSTEM

属性:アーカイブ

サイズ:1722880作成済み:2010 \ 12 \ 01 12:10:10

変更:2010 \ 12 \ 01 12:10:10



コンポーネント{E014B150-1444-4641-A21C-DB27C4F3CB40} (共有)

製品コード:{AF4A6C3F-E538-403D-A73B-F631B7B0C983}

名前:製品B

製品コード:{70B5C9EF-54D1-4D2C-8440-AB311D730C86}

名前:製品A

コンポーネントパス:C:\ Program Files(x86)\ companyname \ Product A \ 1.0 \ bin \ symbols.dll

バージョン: 3.0.2

所有者:NT AUTHORITY \ SYSTEM

属性:アーカイブ

サイズ:1721856作成:2010 \ 10 \ 29 19:45:52

変更:2010 \ 10 \ 29 19:45:52



つまり 同じComponentIdを持つモジュールは共有と見なされ、バージョンは最後にインストールされた製品のモジュールのバージョンとのみ比較されます。 これらは異なる方法で配置された異なる製品であるという事実にもかかわらず。



これらのモジュールを「共通ファイル」に配置することは、オプションではありません。製品の異なるバージョンをインストールする状況は非常に受け入れられるからです。 ComponentIdを異なるものにする必要がありました。



All Articles