WIX Автогенерация GUID *?
Допустим, я сгенерировал свой файл 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 ответов
Product/@Id="*"
случайным образом генерирует новый GUID, которого достаточно для кодов продуктов. Component/@Guid="*"
вычисляет GUID, который остается таким же, пока ваш целевой путь остается тем же, что необходимо для соблюдения правил компонента.
Идентификатор продукта (ProductCode) однозначно идентифицирует все в пакете установщика как конкретный продукт. При поиске, чтобы увидеть, установлена ли предыдущая версия, выполняется поиск по коду обновления. Для всех предметов, найденных с определенным кодом обновления, установщик будет отмечать каждый из кодов продукта как различные воплощения одного и того же продукта. Таким образом, вы можете сказать, что другой код продукта и тот же код обновления идентифицируют различные варианты (версии, если хотите, одного и того же продукта).
Если вы хотите отправлять обновления как MSP (Small Update или Minor Upgrade в терминологии Microsoft), не используйте автоматически сгенерированные GUID. Если вы когда-либо собираетесь отправлять обновления только в виде MSI (Major Upgrades), вам все равно нужно каждый раз менять Код продукта, чтобы автоматически генерироваться. Смотрите -> http://msdn.microsoft.com/en-us/library/aa370579.aspx
Это краткое руководство может помочь вам. Обязательно проверьте ссылки MSDN, на которые есть ссылки из этой статьи, чтобы лучше понять, как это работает.
То, что связывает другие версии с новой версией, является кодом обновления. Это не должно измениться для того же продукта, если вы хотите использовать функциональность обновления. В противном случае это почти как каждая версия это другой продукт
Это может быть несколько ошибочным, но у меня было много файлов, которые я импортировал как компоненты в новый WiX Product.wxs
файл. Я обнаружил, после того как я создал все компоненты с Guid="*"
что при попытке собрать установщик WiX сообщил о следующей ошибке для каждого компонента:
Компонент 'AjaxControlToolkit.dll' имеет ключевой файл с путем 'TARGETDIR\ajaxcontroltoolkit.dll'. Поскольку этот путь не имеет корня в одном из стандартных каталогов (например, ProgramFilesFolder), этот компонент не соответствует критериям для автоматически созданного guid.
Я использовал следующий скрипт PowerShell, чтобы назначить новый guid для каждого компонента. Имейте в виду, что этот скрипт изменит 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}">
НЕ поддержание статического кода обновления приведет к дублированию идентичных установок.