Вопрос

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

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

Это было полезно?

Решение

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

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

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

Обновить:Теперь у 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 компонента, поскольку это означает потерю старого компонента и создание нового компонента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top