В моих инсталяциях есть определенный набор файлов, который повторяется в разных продуктах/версиях продукта.
Естественно я сделал его в виде подключаемого файла для сборки в 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 был разным.
Естественно я сделал его в виде подключаемого файла для сборки в 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 был разным.