Написание обновляемых пакетов msi с помощью WiX

Я пишу установщик для существующего продукта, для которого более ранний установщик был написан в NSIS ( Система установки Nullsoft Scriptable). Мне нужно написать установщик на основе MSI для этого продукта, используя WiX. У меня есть определенный вопрос по этому поводу: -

  1. Как определить, установлено ли мое приложение на целевой машине? Приложение могло быть установлено с помощью NSIS (более старые версии) или MSI (теперь и далее).
  2. Как написать установщик WiX, который может обновляться, если на целевой машине установлена ​​более старая / такая же версия продукта. Я нашел эту тему на нескольких сайтах, но все они не работают. В частности, я хочу знать, какую информацию (GUID, версию и т. Д.) Необходимо изменить в базе кода установщика для каждого выпуска программного обеспечения.
  3. Каждый год выпускаются три / четыре версии нашего продукта. Какой установщик мне больше подойдет?

Обратите внимание: если я просто изменю версию элемента продукта в коде Wix, более новый установщик не сможет заменить старую. Когда я дважды щелкаю новую версию установщика, появляется диалоговое окно с сообщением об ошибке.

Другая версия этого продукта уже установлена. Установка этой версии не может быть продолжена. Чтобы настроить или удалить существующую версию этого продукта, используйте «Установка и удаление программ на панели управления».

Образец кода:

<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >
   <Product Name='Baton' Id='41B8F929-B6CF-41BE-9E40-C96D9BD6D672'
       UpgradeCode='E1F03FA4-D470-4FA6-86BA-F5CDD3007C1D'
       Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='Company Name.'>

       <Package Id='*' Keywords='Installer' Description="product Installer"
           Comments='product comments'
           InstallerVersion='100' Languages='1033' Compressed='yes'
           SummaryCodepage='1252' />

       <Upgrade Id='E1F03FA4-D470-4FA6-86BA-F5CDD3007C1D'>
           <UpgradeVersion OnlyDetect='no' Property='PREVIOUSFOUND' Minimum='1.0.0'
               IncludeMinimum='yes' Maximum='1.1.0' IncludeMaximum='yes' />
       </Upgrade>

       <!-- ***Install execution sequence*** -->
       <InstallExecuteSequence>
           <RemoveExistingProducts After="InstallInitialize"/>

person user222846    schedule 03.12.2009    source источник
comment
Я предлагаю вам в следующий раз сосредоточиться на конкретной проблеме. Трудно написать единый последовательный ответ на набор из 3 или 4 наполовину связанных вопросов. Я только что ответил (как мне кажется) на главный вопрос.   -  person Wim Coenen    schedule 04.12.2009


Ответы (1)


Другая версия этого продукта уже установлена. Установка этой версии не может быть продолжена. Чтобы настроить или удалить существующую версию этого продукта, используйте «Установка и удаление программ» на панели управления.

Это ошибка, которую вы получаете, когда заново собираете программу установки с тем же идентификатором продукта, а затем снова запускаете ее. Чтобы этого избежать, установите идентификатор элемента продукта равным Id="*".

Основные обновления можно реализовать, как указано в этом ответе. Он делает примерно то же, что и ваш пример кода, за исключением того, что он использует переменные препроцессора, чтобы поддерживать согласованность версии между элементом Product и элементом UpgradeVersion. Это также предотвращает переход на более раннюю версию.

person Wim Coenen    schedule 04.12.2009