Нечетные правила компонента MSI
-
20-12-2019 - |
Вопрос
У меня есть установщик, который, кажется, не следит за правилами компонента MSI при установке. Вот сценарий:
ОС: Windows 7 x64
Продукт A Устанавливает набор файлов, прикрепленных к компоненту с GUID «123ABC» в C: \ Program Files \ Common Files \ Foo. Компонент имеет следующие файлы:
foo.dll, версия 1.0.0.0, (Keypath)
foo.sys, версия 1.0.0.0
foo.inf, нет версии
foo.cat, нет версии
Product B Устанавливает тот же набор файлов, прикрепленных к одному и тому же компоненту GUID "123ABC" на тот же путь C: \ Program Files \ Common Files \ Foo. Компонент имеет следующие файлы:
foo.dll, версия 1.0.0.1, (Keypath)
foo.sys, версия 1.0.0.0
foo.inf, нет версии
foo.cat, нет версии
Продукт A установлен первый, а продукт B не выполняет обновление продукта A, они просто разделяют общий MSM, который содержит компонент «123ABC». Мое ожидание заключается в том, что при установке продукта B MSI будет сравнивать версии Keyphath of Foo.dll и определите этот продукт B's foo.dll новее. Тогда все четыре файла, связанные с компонентом «123ABC», будут перезаписать существующие файлы на диске, которые были установлены продуктом A. Это не происходит :( вместо этого это результирующий файловый материал:
C: \ Program Files \ Common Files \ Foo
foo.dll, версия 1.0.0.1 (из продукта b)
foo.sys, версия 1.0.0.0 (от продукта A)
foo.inf, нет версии (от продукта A)
foo.cat, нет версии (из продукта b)
Только DLL и файл CAT перезаписываются. Из файла журнала MSI я могу видеть следующее:
MSI (s) (4C:F0) [17:29:24:227]: File: C:\Program Files\Common Files\Foo\foo.dll; Overwrite; Won't patch; Existing file is a lower version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.sys; Won't Overwrite; Won't patch; Existing file is of an equal version
MSI (s) (4C:F0) [17:29:24:305]: File: C:\Program Files\Common Files\Foo\foo.inf; Won't Overwrite; Won't patch; Existing file is unversioned and unmodified - hash matches source file
MSI (s) (4C:F0) [17:29:24:335]: File: C:\Program Files\Common Files\Foo\foo.cat; Overwrite; Won't patch; Existing file is unversioned and unmodified - hash doesn't match source file
.
Я думал, что компоненты MSI установлены все связанные файлы на основе того, должен ли быть установлен KeyPath. Что может привести к тому, что каждый файл, связанный с тем же компонентом, который должен быть индивидуально сравниваться?
Решение
Штат клавиатуры определяет, будет ли компонент будет действовать.Ресурсы в компоненте затем следуют за их правилами: например, файлы следуют за правила версий файлов .
Другие советы
Предполагая, что каждый продукт использует правила стоимости по умолчанию (OMUS) Модули слияния, содержащие общие компоненты, должны работать.FWIW, вы можете рассмотреть возможность создания MSI, который потребляет этот модуль слияния, а затем добавляет его в Bootstrapper для обеих продуктов.Патч-сервис может быть чище таким образом.