Вопрос

У меня есть установщик, который, кажется, не следит за правилами компонента 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 для обеих продуктов.Патч-сервис может быть чище таким образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top