Pull to refresh

Проблемы обновления модулей с одинаковым ComponentId

Reading time 2 min
Views 974
В моих инсталяциях есть определенный набор файлов, который повторяется в разных продуктах/версиях продукта.

Естественно я сделал его в виде подключаемого файла для сборки в wix. Получилась ситуация что часть модулей в различных инсталяциях имеет одинаковый ComponentId.
Вроде как это допускается, поскольку у продуктов разный ProductId/UpgradeCode, а отслеживание компонентов ведется по связке ProductId.ComponentId. Это специально уточнялось в свое время в одном из блогов разработчика Wix.

Через некоторое время, от тестеров начали сыпаться нетипичные баги, в большинстве случаев выявлялась проблема с обновлением модулей из этого повторяющегося набора.


Т.е. например:

в продукте A есть модуль symbols.dll c версией 3.0.2
в продукте Б есть модуль symbols.dll c версией 3.0.2

Оба продукта установлены, сначала А потом Б.
Выпускается обновление с новой версией билда. т.е.

в продукте A — модуль symbols.dll c версией 3.0.3
в продукте Б — модуль symbols.dll c версией 3.0.3

Теперь если обновить продукт Б, а затем продукт А.
То модуль в составе Б вполне себе обновляется, а в продукте А остается без изменений.
В логе инсталяции пишется, что обновление модуля требуется, но обновление не происходит.

Воспользовавшись методом описанным в blogs.msdn.com/b/astebner/archive/2005/07/01/using-msiinv-to-gather-information-about-what-is-installed-on-a-computer.aspx я получил информацию по продуктам и был удивлен.

{E014B150-1444-4641-A21C-DB27C4F3CB40} (shared) (local)
Path: C:\Program Files (x86)\companyname\Продукт Б\1.0\bin\symbols.dll
Version: 3.0.3
Owner: NT AUTHORITY\SYSTEM
Attributes: ARCHIVE
Size: 1722880 Created: 2010\12\01 12:10:10
Changed: 2010\12\01 12:10:10

Component {E014B150-1444-4641-A21C-DB27C4F3CB40} (shared)
Product Code: {AF4A6C3F-E538-403D-A73B-F631B7B0C983}
Name: Продукт Б
Product Code: {70B5C9EF-54D1-4D2C-8440-AB311D730C86}
Name: Продукт А
Component path: C:\Program Files (x86)\companyname\Продукт A\1.0\bin\symbols.dll
Version: 3.0.2
Owner: NT AUTHORITY\SYSTEM
Attributes: ARCHIVE
Size: 1721856 Created: 2010\10\29 19:45:52
Changed: 2010\10\29 19:45:52

Т.е. модули с одинаковым ComponentId считаются Shared, и сравнение версии идет только с версией модуля из последнего установленного продукта. Невзирая на то, что это разные продукты, размещенные по разным путям.

Выносить эти модули их в «Common Files» совершенно не выход, поскольку вполне допустима ситуация установки разных версий продуктов. Пришлось сделать так, что бы ComponentId был разным.
Tags:
Hubs:
-3
Comments 3
Comments Comments 3

Articles