Подсчет ссылок MSI: два продукта устанавливают одни и те же MSI

Когда продукты A и B устанавливают несколько MSI, а некоторые из MSI одинаковы, удаляет ли A или B другие? Имеет ли место установки значение?

Кроме того, что происходит, когда общая версия MSI C выше в продуктах B и B обновляет C при установке? Теперь удаление B удалит общий MSI C, который разбивает Продукт A. Как вы справляетесь с этим изящно, не используя флаг Permanent?

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

Как правило, все файлы MSI считают, что им принадлежит все, что они устанавливают, и они удаляют все, прикрепленные к GUID компонента внутри MSI при удалении, если счетчик ссылок (количество продуктов, использующих компонент) равен нулю.

Для этого правила есть определенная квалификация :

  • Если компонент отмечен как постоянный, он никогда не удаляется
  • Если элемент файла / реестра не имеет никакого GUID компонента , он устанавливается, никогда не отслеживается установщиком Windows и не удаляется
  • Наконец, подсчет ссылок для MSI позволяет одному и тому же компоненту делиться между несколькими продуктами, и он будет сохраняться на диске во время удаления, если он зарегистрирован в использовании несколькими другими пакетами установщика

Механизмы создания общих компонентов между пакетами MSI обычно:

  1. Объединенные модули позволяют устанавливать общие компоненты, которые подсчитываются по ссылке, и которые останутся на диске после удаления соответствующего продукта, если в системе есть другие клиенты, использующие GUID. Модуль слияния объединяется в другие пакеты MSI во время компиляции. Форма бинарного раннего связывания, если хотите. Его можно объединить в любой пакет.
  2. С появлением исходных файлов установщика Wix (основанные на xml-файлах) можно включить один и тот же сегмент файлов из нескольких настроек через источник источника XML, а не модуль слияния. На мой взгляд, это значительно превосходит, потому что Wix лучше работает для контроля источника ( см. Ссылку Wix для объяснения ). Чрезвычайно важно понять, что « источник источника Wix включает файл » имеет тот же эффект, что и модуль слияния – его компоненты правильно подсчитаны для совместного использования между различными пакетами установщика при условии, что идентификаторы GUID в исходном файле жестко закодированы (я рекомендую не использовать автогенерированные направляющие для этой конкретной цели). Мое личное мнение, что вы должны использовать сторонние модули слияния для общих файлов времени исполнения, но только Wix включает в себя ваши собственные общие файлы. Объединить модули сложнее, чем Wix включает imho.

Обновление и замена файлов :

  • Что касается сценариев обновления, правила замены файлов MSI позаботятся о обновлении новых файлов, в зависимости от общего параметра в специальном объекте Windows Installer REINSTALLMODE .
  • В общем случае файлы с более высокой версией перезаписывают файлы с более низкой версией. Файлы, не поддерживающие версию, перезаписываются, если они не изменены. Если они изменены, создание и изменение штампов даты различны, и файл остается в покое.
  • Имейте в виду, что проблема понижения файлов активно обескураживается общим дизайном MSI. Если вам нужно понизить файлы (общие или нет), есть что-то развертывающее, вонючее о вашем дизайне.

В этот момент я бы полностью прочитал эти ответы:

  • Установщик Windows и создание WiX – для короткой истории и контекста Wix
  • Изменить GUID моего компонента в wix? – для подсчета ссылок компонентов
  • Установка Wix, сервер, клиент или оба – для клиент-серверной упаковки
  • Wix для установки нескольких приложений – для изменения требований и проблем установки
  • WiX-трюки и подсказки – для советов и трюков сообщества Wix
  • Как включить wxi-файл в wxs? – для простой идеи о том, как обращаться с файлами Wix include

Если вы используете Wix или хотите использовать Wix, я бы подумал, что лучший способ справиться с вашими перекрывающимися продуктами – разложить ваш установщик на исходные файлы сегмента Wix, которые вы включите по мере необходимости в своих основных установщиках. Это позволит удалить один продукт на любые компоненты, используемые другими приложениями.

С учетом сказанного, я не люблю вызывать слишком много перекрывающихся зависимостей в установщиках по причинам, перечисленным в этой статье (также перечисленным выше): Wix для установки нескольких приложений .

Для стабильности крайне важно, чтобы общие компоненты были стабильными до того, как они использовались слишком многими настройками, поскольку исправление ошибок в качестве общего правила потребует перекомпиляции всех настроек, с которыми компилируется или объединяется общий компонент. Легкий способ сказать это: объединить файлы вместе, которые меняются вместе .

Чтобы противостоять этой потребности в массовой перекомпиляции, вы можете выбрать автономную поддерживающую установку, состоящую из некоторых разделяемых компонентов. Один или несколько таких « разделяемых компонентов », которые, вероятно, содержат Wix, include в себя изменения в одном и том же медленном расписании выпуска , а затем отдельные настройки для каждого продукта должны учитывать любые потребности развертывания при сохранении баланса между ремонтопригодностью и гибкостью .

Затем должна быть настроена настройка продукта, которая часто перекомпилируется, а настройки разделяемых модhive должны быть разработаны для минимальной перекомпиляции. Затем ждите меняющихся требований :-).

Для меня это все о сплоченности и сцеплении , а также о сложности балансирования продаж, маркетинга и технических потребностей.

Если в продукте A и продукте B есть общий MSI C, тогда, если установлен продукт A, также установлен MSI C, теперь, когда установлен продукт B, MSI C не будет установлен, поскольку он уже доступен в системе (если продукт B является WiX Запись основана, он регистрирует зависимость). В случае деинсталляции подсчет ссылок автоматически обрабатывается, если Продукт А и Продукт В являются установщиком на основе WiX Burn или любым другим Bootstrapper, который поддерживает подсчет ссылок, а MSI C удаляется вместе с Продуктом B.

даже я искал ответ на вышеупомянутый вопрос, но в Wix v3.7 и выше пакеты MSI автоматически ссылаются на счет двигателя Burn. Я проверил это и отлично работает. То же самое можно проверить в блоге Роба

Давайте будем гением компьютера.