WiX и общие, версионные компоненты

Это должно быть общей потребностью, но я нахожу едва ли какие-либо ссылки на это в Интернете...

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

Как и вчера, каждый компонент устанавливался в другое место и работал нормально, но это было только временно, так как некоторые файлы, сборки gac и настройки реестра должны были использоваться совместно. Теперь я сделал модуль слияния из общих компонентов, и этот новый сценарий слияния модулей прекрасно работает во время установки в идеальных условиях, и у меня есть серьезные обновления одной MSI.

Проблема возникает во время установки MSI, когда версия модуля слияния в установочной MSI ниже, чем у уже установленной версии (другой MSI) - более новая версия перезаписывается более старой версией! Кроме того, после процедуры удаления какой-либо из трех msis общая информация удаляется, даже если она все еще используется другими установленными компонентами.

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

Я хочу, чтобы три установщика содержали любую последнюю версию компонентов в модуле слияния, которая была доступна во время сборки. Во время установки, если установлена ​​более новая версия общих компонентов, не перезаписывайте их. Во время удаления (и обновления) количество ссылок, которые должны были быть отслежены, будет определять, следует ли удалять общие элементы.

В случае, если я просто что-то упустил, вот важные части файла слияния: номер версии моего модуля слияния (y в "wxy") увеличивается с каждой сборкой, идентификатор пакета остается фиксированным, и каждый компонент имеет Shared="yes" (хотя я пробовал и без этого).

Я начал хранить различные номера версий в реестре и подумал, что, возможно, я смогу условно установить функцию модуля слияния, только если номер версии в реестре отсутствовал или был ниже. Но условные аргументы не могут правильно оценить wxyz, как сказано в документации. Затем в документации предлагается AppSearch, но AppSearch RegistrySearch может только проверять наличие, но не сравнение номеров версий. Очевидно FileSearch может, но номера версий файла сборки не будут увеличиваться с каждой сборкой.

И я читал, что у MergeModules много проблем - возможно, это они - но wixlibs, похоже, тоже не предлагают решений этих проблем.

Так, как правильно сделать управление версиями модуля слияния??? Я нашел книгу, в которой есть запись TOC под названием "Управление версиями модуля слияния" на Amazon, но эта книга больше не печатается.:-П

1 ответ

Мне кажется, что это поведение, которое мы хотим - всегда иметь лучшую версию общего компонента - поддерживается только в MSI 4.5 и выше. Так что, возможно, это не проблема самого WiX, но я почти ничего не знаю о WiX.

Мы хотим, чтобы атрибут msidbComponentAttributesShared (0x0800) был установлен в таблице компонентов для общего компонента. Может быть, вы можете проверить свой МСМ с Orca для этого.

Я думаю, что это сообщение в блоге упоминает кое-что об этом (но это, вероятно, не очень поможет вам здесь): http://blogs.msdn.com/windows_installer_team/archive/2008/03/29/windows-installer-4-5-servicing-enhancements-shared-components-and-patch-uninstall.aspx

Другие вопросы по тегам