Изменить мой компонент GUID в wix? - PullRequest
26 голосов
/ 10 сентября 2009

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

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

Ответы [ 3 ]

47 голосов
/ 14 сентября 2009

Общая концепция MSI заключается в том, что существует 1: 1 отображение между GUID компонента (уникальный идентификатор) и абсолютный путь (установить местоположение / путь к ключу). Полный путь, включая имя файла, если любой. Смотрите обновление ниже для новой функции 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) утверждает, что это безопасно для нормального использования . В качестве концепции я настоятельно рекомендую это, поскольку он включает в себя auto-magic и защищает вас от некоторой сложности.

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

17 голосов
/ 10 сентября 2009

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

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

0 голосов
/ 10 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...