WIX Автогенерация GUID *? - PullRequest
       45

WIX Автогенерация GUID *?

28 голосов
/ 29 апреля 2011

Допустим, я сгенерировал свой файл WIX XML с идентификатором продукта *.Также для каждого GUID компонента я использую *.

  <Product Id="*" Name="xxx" Language="1033" Version="1.0.0.0" Manufacturer="xxx" UpgradeCode="xxx">

За кулисами * крутится уникальный GUID каждый раз, когда я компилирую свой WIX Installer?Допустим, у меня установлена ​​версия 1.0.0.Затем я перекомпилирую мой WIX Installer до версии 1.0.1.

Когда я иду к установке 1.0.1, как WIX узнает, что 1.0.0 уже установлена, и, таким образом, удалит все файлы / записи реестра и установит 1.0.1?

Должен ли я использовать* из GUID или у меня должен быть уникальный идентификатор / GUID в моей конфигурации WIX XML?

Ответы [ 7 ]

46 голосов
/ 29 апреля 2011

Product/@Id="*" случайным образом генерирует новый GUID, которого достаточно для кодов продуктов. Component/@Guid="*" вычисляет GUID, который остается таким же, пока ваш целевой путь остается тем же, что необходимо для соблюдения правил компонента.

7 голосов
/ 03 мая 2011

Идентификатор продукта (ProductCode) однозначно идентифицирует все в пакете установщика как конкретный продукт.При поиске, чтобы увидеть, установлена ​​ли предыдущая версия, выполняется поиск по коду обновления.Для всех предметов, найденных с определенным кодом обновления, установщик будет отмечать каждый из кодов продукта как различные воплощения одного и того же продукта.Таким образом, вы можете сказать, что другой код продукта и тот же код обновления определяют разные варианты (версии, если хотите, одного и того же продукта).

4 голосов
/ 21 февраля 2014

С http://windows -installer-xml-wix-toolset.687559.n2.nabble.com / автоматически сгенерированные vs-статически назначенные GUIDs-td4670083.html :

Если вы хотите отправлять обновления как MSP (Small Update или Minor Upgrade in Терминология Microsoft) не используйте автоматически генерируемые идентификаторы GUID. Если ты только когда-либо отправлять обновления как MSI (Major Upgrades), которые вам нужно изменить Код продукта каждый раз, так что автоматическое генерирование в порядке. Смотрите -> http://msdn.microsoft.com/en-us/library/aa370579.aspx

3 голосов
/ 29 апреля 2011

Это краткое руководство может помочь вам.Обязательно проверьте ссылки MSDN, на которые есть ссылки в этой статье, чтобы лучше понять, как это работает.

1 голос
/ 03 мая 2011

Что связывает другие версии с новой версией - это код обновления. Это не должно измениться для того же продукта, если вы хотите использовать функциональность обновления. Иначе это почти как каждая версия - это отдельный продукт

0 голосов
/ 27 февраля 2017

Вы должны установить значение для свойства "UpgradeCode" в элементе вашего продукта. Который должен быть уникальным и оставаться неизменным для всех ваших будущих сборок для установки. Код обновления отвечает за разрешение обновления установки или не обновление в зависимости от выполняемых версий установки.

т.е.: -

<Product Id="*" Name="My Application" Language="1033" Version="1.1.0" Manufacturer="Myself :p" UpgradeCode="{561DA858-5398-4B87-8F3A-8B8BB12650F6}"> 

НЕ поддержание статического кода обновления приведет к дублированию идентичных установок.

0 голосов
/ 20 апреля 2015

Это может быть несколько ошибочным, но у меня было много файлов, которые я импортировал как компоненты в новый файл WiX Product.wxs.После того, как я создал все компоненты с Guid="*", я обнаружил, что при попытке собрать установщик WiX сообщил о следующей ошибке для каждого компонента:

Компонент AjaxControlToolkit.dll имеет файл ключас путем 'TARGETDIR \ ajaxcontroltoolkit.dll'.Поскольку этот путь не имеет корня в одном из стандартных каталогов (например, ProgramFilesFolder), этот компонент не соответствует критериям для автоматически сгенерированного guid.

Я использовал следующий скрипт PowerShell для назначения новогоРуководство для каждого компонента.Имейте в виду, что этот сценарий изменит файл Product.wxs напрямую, и следует сохранить резервную копию файла на случай, если что-то пойдет не так:

(Get-Content Product.wxs) | 
Foreach-Object { $guid = [guid]::NewGuid().ToString(); $_ -replace 'Guid="\*"',"Guid=""$guid"""}  | 
Out-File Product.wxs
...