Изменить GUID моего компонента в wix? - программирование
Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

  • Всегда используйте отдельный компонент для каждого файла (даже для не-двоичных файлов). Это позволяет избежать всех проблем. Есть несколько исключений:
    • Многостраничные сборки .NET должны быть в одном компоненте, так как они всегда должны быть установлены/удалены как единое целое.
    • Несколько других, общих типов файлов входят в "совпадающие пары" - они принадлежат друг другу. Часто это файлы содержимого и индекса. В качестве примера рассмотрим файлы справки Microsoft:
      • . Файлы HLP и .CNT принадлежат друг другу.
      • .CHM и .CHI файлы принадлежат друг другу.
    • Вероятно, существует несколько таких типов файлов, которые принадлежат друг другу и поэтому должны быть помещены в один и тот же компонент, поэтому они устанавливают/удаляют вместе - я подозреваю, что определенные файлы сертификатов являются кандидатами. Трудно найти определенный список. Просто спросите себя "эти файлы всегда принадлежат друг другу" - так они всегда появляются попарно всякий раз, когда есть новая версия? Если да, то установите их через один и тот же компонент. Установите файл версии, если таковой имеется, в качестве ключевого файла.
  • Помните, что после того, как вы выделили 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 компонента не должен меняться.

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

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

Ответ 2

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

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

Ответ 3

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