Подсчет ссылок MSI: два продукта устанавливают одинаковые MSI
Когда продукты A и B устанавливают несколько MSI и некоторые MSI одинаковы, будет ли удаление A или B влиять на другое? Имеет ли значение место установки?
Кроме того, что произойдет, если общая версия MSI C выше в продуктах B и B при установке C? Теперь удаление B удалит общий MSI C, который нарушает продукт A. Как вы справляетесь с этим без излишнего использования флага Permanent?
3 ответа
Первое, что приходит на ум в связи с этим вопросом, - разлагаются ли данные продукты так, как они должны быть.
Как правило, все файлы MSI считают, что им принадлежит то, что они устанавливают, и они удаляют все, что связано с GUID компонента внутри MSI, при удалении, если число ссылок (число продуктов, использующих компонент) равно нулю.
Есть несколько квалификаций к этому правилу:
- Если компонент помечен как постоянный, он никогда не удаляется
- Если элемент файла / реестра вообще не имеет GUID компонента, он устанавливается, никогда не отслеживается установщиком Windows и также не будет удален
- Наконец, подсчет ссылок для MSI позволяет разделить один и тот же компонент между несколькими продуктами, и он будет сохраняться на диске во время удаления, если он зарегистрирован в использовании несколькими другими установочными пакетами.
Механизмы для создания общих компонентов между пакетами MSI, как правило:
- Модули слияния позволяют устанавливать общие компоненты с подсчетом ссылок, которые останутся на диске после удаления соответствующего продукта, если в системе есть другие клиенты, использующие GUID. Модуль слияния объединяется с другими пакетами MSI во время компиляции. Форма двоичного раннего связывания, если хотите. Его можно объединить в любую упаковку.
- С появлением Wix (исходных файлов установщика на основе xml) стало возможным включать один и тот же сегмент файлов из нескольких установок через исходный файл XML вместо модуля слияния. На мой взгляд, это намного лучше, потому что Wix лучше работает для контроля версий ( см. Ссылку Wix для объяснения). Крайне важно понимать, что " файл включения исходного кода Wix " имеет тот же эффект, что и модуль слияния - его компоненты правильно подсчитаны для совместного использования между различными пакетами установщика, при условии, что GUID в исходном файле жестко заданы (я рекомендую не использовать автоматически генерируемые направляющие для этой конкретной цели). По моему личному мнению, вы должны использовать сторонние модули слияния для общих файлов времени выполнения, но только Wix включает в себя ваши собственные общие файлы. Модули слияния сложнее в управлении, чем в Wix, включая imho.
Обновление и замена файла:
- Что касается обновления сценариев, правила замены файлов MSI позаботятся об обновлении более новых файлов, в зависимости от общих настроек в специальном свойстве установщика Windows REINSTALLMODE.
- Обычно файлы более высокой версии перезаписывают файлы более низкой версии. Не версионные файлы перезаписываются, если они не изменены. Если они изменяются, штампы создания и изменения даты отличаются, и файл остается один.
- Имейте в виду, что проблема устаревания файлов активно не поощряется общим дизайном MSI. Если вам нужно понизить версию файлов (совместно используемых или нет), в вашем проекте есть что-то вонючее при развертывании.
На этом этапе я бы внимательно прочитал эти ответы:
- Установщик Windows и создание WiX - для краткой истории и контекста Wix
- Изменить GUID моего компонента в wix? - для подсчета ссылок на компоненты
- Установка Wix, сервер, клиент или оба - для упаковки клиент / сервер
- Wix для установки нескольких приложений - для изменения требований и проблем с настройкой
- WiX трюки и советы - для сообщества Wix советы и хитрости
- Как включить файл wxi в wxs? - для простой идеи о том, как обращаться с включаемыми файлами Wix
Если вы используете Wix или вы хотите использовать Wix, я думаю, что лучший способ справиться с вашими перекрывающимися продуктами - это разложить ваш установщик на исходные файлы сегмента Wix, которые вы при необходимости включаете в свои основные установщики. Это позволит удалить один продукт, оставив на месте любые компоненты, используемые другими приложениями.
С учетом вышесказанного я не люблю создавать слишком много перекрывающихся зависимостей в моих установщиках по причинам, перечисленным в этой статье (также приведенной выше): Wix для установки нескольких приложений.
Для стабильности крайне важно, чтобы совместно используемые компоненты были стабильными, прежде чем их будет использовать слишком много установок, поскольку исправление ошибки, как общее правило, потребует перекомпиляции всех установок, в которые совместно используемый компонент компилируется или объединяется. Самый простой способ сказать это: объединить файлы, которые меняются вместе.
Чтобы противодействовать этой необходимости массивной перекомпиляции, вы можете выбрать отдельную вспомогательную настройку, состоящую из некоторых общих компонентов. Одна или пара таких " настроек общих компонентов ", которые, вероятно, содержат Wix, включают эти изменения вместе в аналогичном расписании медленного выпуска, а затем отдельные настройки для каждого продукта должны быть в состоянии учитывать любые потребности развертывания при сохранении баланса между ремонтопригодностью и гибкостью.
В этом случае часто следует перекомпилировать настройки продукта, а настройки общих модулей должны быть рассчитаны на минимальную перекомпиляцию. Тогда ждите изменения требований:-).
Для меня это все о сплоченности и взаимосвязи, а также о сложности баланса между продажами, маркетингом и техническими потребностями.
Если продукт A и продукт B имеют общий MSI C, то если продукт A установлен, также установлен MSI C, теперь, когда продукт B установлен, MSI C не будет установлен, поскольку он уже доступен в системе (если продукт B является WiX Записать на основе, он регистрирует зависимость). В случае удаления подсчет ссылок выполняется автоматически, если продукт A и продукт B являются установщиком на основе WiX Burn или любой другой загрузчик, который поддерживает подсчет ссылок, иначе MSI C удаляется вместе с продуктом B.
Даже я искал ответ на поставленный выше вопрос, но в Wix v3.7 и выше пакеты MSI автоматически подсчитывают ссылки, подсчитываемые движком Burn. Я проверил это, и работает отлично. То же самое можно проверить в блоге Роба.