Изменить GUID моего компонента в wix?

Когда я должен изменить или не изменить свой GUID компонента в WIX? Информация Microsoft SDK вводит в заблуждение.

Редактирование Glytzhkof: Чтобы прояснить, вопрос касается, когда GUID компонента должен быть изменен для компонента MSI. Компонент может изменяться с такими аспектами, как: изменение пути назначения, добавление или удаление файлов в / из одного и того же компонента, добавление данных реестра и т. Д.... Это вызывает проблемы в отношении так называемой ссылки на компонент, т.е. создание компонентов в MSI.

3 ответа

Решение

Общая концепция MSI заключается в том, что между GUID компонента (уникальным идентификатором) и абсолютным путем (путь установки / путь к ключу) существует соотношение 1: 1. Полный путь, включая имя файла, если есть. Смотрите обновление ниже для новой функции Wix, чтобы автоматически с этим справиться.

Я использую некоторые простые правила для работы с слишком сложными и бессмысленными правилами для компонентов:

  • Всегда используйте отдельный компонент для файла (даже для не двоичных файлов). Это позволяет избежать всевозможных проблем. Есть несколько исключений:
    • Многофайловые сборки.NET должны быть в одном компоненте, так как они всегда должны устанавливаться / удаляться как единое целое.
    • Несколько других общих типов файлов входят в "совпадающие пары" - они принадлежат друг другу. Часто это файлы содержимого и индекса. В качестве примера рассмотрим файлы справки Microsoft:
      • Файлы.HLP и.CNT принадлежат друг другу.
      • Файлы.CHM и.CHI принадлежат друг другу.
    • Вероятно, существует несколько таких типов файлов, которые принадлежат друг другу и, следовательно, должны быть помещены в один и тот же компонент, чтобы они устанавливались / удалялись вместе - я подозреваю, что определенные файлы сертификатов являются кандидатами. Трудно придумать определенный список. Просто спросите себя "всегда ли эти файлы принадлежат друг другу" - чтобы они всегда отображались парами при появлении новой версии? Если да, то установите их через один и тот же компонент. Установите версионный файл, если он есть, в качестве ключевого файла.
    • Я хочу добавить файлы драйверов в качестве примера группы файлов, всегда принадлежащих друг другу: SampleDriver.cat, SampleDriver.inf, SampleDriver.sys, SampleDriver.cer, Все они должны соответствовать как "единица" для развертывания.
  • Помните, что после того, как вы выделили GUID для компонента, он становится неизменным для ключевого пути этого компонента (абсолютный путь). Если вы перемещаете файл в новое место или переименовываете файл, присвойте ему новый GUID компонента (поскольку абсолютный путь отличается, это фактически новый идентификатор).
  • В итоге GUID компонентов привязан к абсолютному месту установки, а не к конкретному файлу. GUID не следует за файлом, если он перемещается. Ссылка GUID учитывает абсолютное местоположение, а не файл как таковой.
  • Не добавляйте и не удаляйте файлы из существующего компонента. Все виды проблем обновления и исправлений. Вот почему, как правило, мне нравится один файл на компонент.
  • Существует много других ссылок на компоненты, но я оставлю это для "обзора".

Некоторые образцы:

  • Вы переименовываете файл C:\Program Files\MyCompany\MyApp\MyFile.exe в C: \ Program Files \ MyCompany \ MyApp \ MyFile_NEW.exe. Что это значит для создания компонентов? Это новый абсолютный путь установки, поэтому вы генерируете новый GUID для хост-компонента, ИЛИ добавляете новый компонент и удаляете старый (что имеет тот же эффект).
  • Ваш обновленный MSI поставляет новую версию MyFile.exe. Расположение такое же, как и раньше, это означает, что GUID компонента не должен изменяться. Это тот же файл (личность), только в другой версии.

ОБНОВЛЕНИЕ: WIX теперь имеет новую функцию GUID компонента автоматической генерации, которая вычисляет GUID, пока целевой путь остается тем же. Я не пробовал это, если честно, но многие, кажется, используют его без проблем, и Роб Меншинг (автор Wix) утверждает, что это безопасно для нормального использования. Как концепция, я очень рекомендую это, так как он обладает некоторой автоматикой и защищает вас от некоторой сложности.

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

Вы никогда не меняете Компонент /@Guid. Вы также никогда не измените набор ресурсов (File, RegistryKey, Shortcut, TypeLib и т. Д.) В компоненте. Когда у вас есть новый ресурс, вы должны создать новый компонент с новым @Guid. Действительно сложная часть заключается в том, что новый компонент не может перекрываться (например, путь к файлу, или путь к ключу реестра, или typelib и т. Д.) Со старым компонентом.

Это в основном Правила для компонентов, ознакомьтесь с: http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101.

Посмотрите Учебное пособие по WiX "Файлы внутри" для подробного объяснения правил компонентов. По сути, это говорит о том, что вы никогда не меняете GUID компонента, так как это означает потерю старого компонента и создание нового компонента.

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