Ответ 1
Продукт/@Id = "*" генерирует новый GUID (т.е. случайным образом). Компонент /@Guid = "*" вычисляет идентификатор 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?
Продукт/@Id = "*" генерирует новый GUID (т.е. случайным образом). Компонент /@Guid = "*" вычисляет идентификатор GUID, который остается таким же, пока ваш путь к файлу остается прежним.
Идентификатор продукта (ProductCode) однозначно идентифицирует все в пакете установщика как определенный продукт. Когда вы пытаетесь найти, установлена ли предыдущая версия, выполняется поиск по обновленному коду. Для всех элементов, найденных с помощью специального кода обновления. Установщик будет отмечать каждый из Кодов Продуктов как различные воплощения одного и того же продукта. Таким образом, вы можете сказать, что другой код продукта того же кода обновления идентифицирует разные воплощения (версии, если вы хотите, одного и того же продукта).
Это краткое руководство может вам помочь. Убедитесь, что проверьте ссылки MSDN, ссылающиеся на эту статью, чтобы лучше понять, как это работает.
Если вы хотите отправлять обновления в виде MSP (Small Update или Minor Upgrade in Microsoft) не используют автоматически созданные GUID. Если вы только когда-либо отправляемые обновления, как MSI (Major Upgrades), вам нужно изменить Код продукта каждый раз, так что автоматическое генерирование в порядке. См. → http://msdn.microsoft.com/en-us/library/aa370579.aspx
Что связывает другие версии с новой версией, это код обновления. Это не должно меняться для одного и того же продукта, если вы хотите использовать функциональные возможности обновления. В противном случае это почти похоже на то, что каждая версия представляет собой другой продукт
Это может быть несколько ошибочным, но у меня было много файлов, которые я импортировал в качестве компонентов в новый файл 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
Вы должны установить значение свойства "UpgradeCode" в свой элемент продукта. Это должно быть уникальным и должно оставаться неизменным для всех ваших будущих сборок для настройки. Код обновления отвечает за возможность обновления установки или обновления в зависимости от выполняемых версий установки.
т.е.: -
<Product Id="*" Name="My Application" Language="1033" Version="1.1.0" Manufacturer="Myself :p" UpgradeCode="{561DA858-5398-4B87-8F3A-8B8BB12650F6}">
НЕ поддерживать статический код обновления приведет к дублированию идентичных установок.