Написание обновляемых MSI-пакетов с использованием WiX - PullRequest
1 голос
/ 03 декабря 2009

Я пишу установщик для существующего продукта, для которого предыдущий установщик был написан в NSIS (Nullsoft Scriptable Install System). Я должен написать установщик 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"/>

1 Ответ

2 голосов
/ 04 декабря 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...