Получение установки для обновления с помощью WiX - старый установщик, созданный без использования WiX - PullRequest
1 голос
/ 27 июля 2010

Я создаю свой первый установщик WiX после того, как устал от взгляда Wise For Windows Installer!

Я собрал установщик, и он отлично работает, но теперь мне нужно получить его для обновления предыдущей версии моего приложения. Хотя я могу найти много постов о настройке WiX, выполняющих обновления, я не могу найти ничего, рассказывающего мне, как это сделать, если у вас есть предыдущий установщик, созданный с использованием другого инструмента.

Я делаю это так же? Нужно ли мне получать коды обновления и т. Д. Из старого установщика? Большое спасибо заранее!

UPDATE:

Следуя инструкциям fletcher, я получил UpgradeCode из старого установщика, используя dark.exe, и добавил его в UpgradeCode тега Product. Начало моего WiX-файла теперь выглядит так ...

<Product Id="fcdc6617-e960-46db-8faa-1dc627f250c8" Name="MyProduct"
       Language="1033" Version="1.2.0.5165" Manufacturer="MyCompany" 
       UpgradeCode="{E97A233B-AB49-4B66-B92A-68972F6D72B9}">

    <Package InstallerVersion="200" Compressed="yes" />

<!-- Upgrade from previous version(s) -->
<Property Id="PREVIOUSVERSIONINSTALLED" Secure="yes" />
<Upgrade Id="{E97A233B-AB49-4B66-B92A-68972F6D72B9}">
  <UpgradeVersion Minimum="1.1.0.4605" Maximum="1.2.0.5165"
                  Property="PREVIOUSVERSIONINSTALLED"
                  IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>

... но теперь, когда я запускаю этот установщик, я получаю два экземпляра MyProduct на целевом компьютере. Куда я иду не так?

Ответы [ 4 ]

4 голосов
/ 03 августа 2010

В WiX v3.5 также есть новый элемент MajorUpgrade, который значительно упрощает процесс создания.

2 голосов
/ 28 июля 2010

Звучит так, как будто вы хотите сделать серьезное обновление установщика Windows. При добавлении таблицы обновлений будет найден существующий продукт и задано свойство PREVIOUSVERSIONINSTALLED для кода продукта.

Чтобы удалить старый продукт во время установки, необходимо добавить действие RemoveExistingProducts в последовательность «Выполнение». Есть несколько вариантов выбора последовательности действий. Самый простой способ - удалить старое приложение в начале последовательности выполнения, добавив:

<RemoveExistingProducts Before="InstallInitialize" /> 

Вы можете выполнить удаление позже в последовательности выполнения, но вы должны быть более осторожны с правилами для компонентов.

1 голос
/ 10 июля 2012

У меня была похожая проблема, и я, наконец, понял ее, запустив мой установщик с подробным ведением журнала.

Существующая установка моего приложения игнорировалась, потому что он был установлен с InstallScope = "per-machine", в то время как значение по умолчанию - для пользователя.

"FindRelatedProducts: current install is per-user.  Related install for product '{GUID}' is per-machine.  Skipping..."

Чтобы решить, я добавил InstallScopeна мой элемент пакета:

<Package Id='*' ... InstallScope="perMachine"/>

Надеюсь, это поможет!

1 голос
/ 28 июля 2010

Сегодня утром наконец-то нашли решение, спасибо всем, кто указал мне верное направление (включая блог Дэвида Гардинера ).Убедившись, что код обновления совпадает с предыдущим установщиком, и что код продукта и код версии были увеличены, вот полное решение:

<Product Id="fcdc6617-e960-46db-8faa-1dc627f250c8" Name="$(var.ProductName)"
       Language="1033" Version="$(var.Version)" Manufacturer="$(var.Manufacturer)" 
       UpgradeCode="$(var.UpgradeCode)">

<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<!-- without this next line the upgrade doesn't work! (not sure why?) -->
<Property Id="ALLUSERS" Value="1" /> 

<Upgrade Id="$(var.UpgradeCode)">

  <UpgradeVersion Property='PREVIOUSVERSIONSINSTALLED' 
                  OnlyDetect="no" IncludeMinimum='yes' 
                  Minimum='1.1.0.4605' IncludeMaximum='no' 
                  Maximum='$(var.Version)' />

  <UpgradeVersion Minimum="$(var.Version)" 
                  IncludeMinimum="no" OnlyDetect="yes" 
                  Language="1033" 
                  Property="NEWERPRODUCTFOUND" />

</Upgrade>

...

<InstallUISequence>

  <Custom Action="UIandAdvertised" Sequence="3">
    ProductState=1
  </Custom>

  <LaunchConditions After="AppSearch" />
</InstallUISequence>

<CustomAction Id="PreventDowngrading" Error="Newer version of this product is already    installed." />
<CustomAction Id="UIandAdvertised" Error="Something about the UI."/>

<!-- Remove exist products before install -->
<InstallExecuteSequence>

  <Custom Action="PreventDowngrading" After="FindRelatedProducts">
    NEWERPRODUCTFOUND AND NOT Installed
  </Custom>

  <LaunchConditions After="AppSearch" />
  <RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>
</Product>
...