WIX Autogenerate GUID *?

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

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

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

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

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

Ответ 1

Продукт/@Id = "*" генерирует новый GUID (т.е. случайным образом). Компонент /@Guid = "*" вычисляет идентификатор GUID, который остается таким же, пока ваш путь к файлу остается прежним.

Ответ 2

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

Ответ 3

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

Ответ 4

Из http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Auto-generated-vs-statically-assigned-GUIDs-td4670083.html:

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

Ответ 5

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

Ответ 6

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

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

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

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

Ответ 7

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

т.е.: -

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

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