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


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

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

3 24

3 ответа:

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

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

  • Всегда используйте отдельный компонент для каждого файла (даже для не бинарники). Это позволяет избежать всевозможных проблем. Есть несколько исключений:
    • Многофайловые .NET-сборки должны находиться в одном компоненте, так как они всегда должны устанавливаться / удаляться как единое целое.
    • несколько других, общих типов файлов входят в "соответствующие пары" - они принадлежат друг другу. Часто это файлы содержимого и индекса. В качестве примера рассмотрим файлы справки Microsoft:
      • .HLP И.Файлы CNT принадлежат друг другу.
      • .МЕХАНИЗМ ПОСРЕДНИЧЕСТВА и.Файлы чи принадлежат друг другу.
    • вероятно, существует несколько таких типов файлов, которые принадлежат друг другу и поэтому должны быть помещены в один и тот же компонент, чтобы они устанавливались/удалялись вместе - я подозреваю, что некоторые файлы сертификатов являются кандидатами. Трудно составить определенный список. Просто спросите себя "Всегда ли эти файлы принадлежат друг другу" - поэтому они всегда появляются в парах, когда появляется новая версия? Если да, то установите их через тот же компонент. Установите версионный файл, если таковой имеется, как ключевой файл.
  • помните, что после того, как вы выделили GUID для компонента, он устанавливается в камень для ключевого пути этого компонента (абсолютный путь). Если вы переместите файл в новое место или переименуете его, дайте ему новый идентификатор GUID компонента (поскольку абсолютный путь отличается, это фактически новый идентификатор).
  • В общем случае GUID компонентов привязываются к абсолютному местоположению установки, а не к определенному файлу. GUID не следует за файл вокруг, если он движется . Ссылка GUID учитывает абсолютное расположение, а не сам файл.
  • не добавляйте и не удаляйте файлы из существующего компонента. В результате возникают всевозможные проблемы с обновлением и исправлением. Вот почему мне нравится один файл на компонент, как правило.
  • существует гораздо больше ссылок на компоненты, но я оставлю это для "обзора".

Некоторые примеры:

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

UPDATE : WIX теперь имеет новый автоматическое создание GUID компонента особенность в том, что вычисляет GUID пока целевой путь остается неизменным. Я не пробовал этого, чтобы быть честным, но многие, кажется, используют его без проблем, и Роб Меншинг (автор Wix) утверждает, что он безопасен для нормального использования. В качестве концепции я настоятельно рекомендую это, так как он имеет некоторые авто-магия и защищает вас от некоторых сложностей.

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

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

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

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