Изменить GUID моего компонента в wix?
-
05-07-2019 - |
Вопрос
Когда я должен изменять или не изменять 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 компонента, поскольку это означает потерю старого компонента и создание нового компонента.