Установщик WIX: удалите предыдущую версию и установите новую версию

У меня есть продукт, до которого я делаю обновление. Теперь я обновил код приложения, а не код обновления, чтобы оно работало как обновление.

На данный момент я не использую тег MajorUpgrade в WIX xml.

Следующая конфигурация удаляет любую предыдущую конфигурацию и устанавливает новые файлы в каталог, но устанавливает только те файлы, номер версии которых изменился.

<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="$(var.SleakSoft_UpgradeCode)">
 <UpgradeVersion Minimum="4.12.0" Maximum="$(var.SleakSoft_AppVersion)" Property="OLDERVERSIONBEINGUPGRADED" OnlyDetect="no" IncludeMinimum="yes" IncludeMaximum="no" />
  <UpgradeVersion Minimum="$(var.SleakSoft_AppVersion)" IncludeMinimum="yes" OnlyDetect="yes" Language="!(loc.LANG)" Property="NEWPRODUCTFOUND" />
  <UpgradeVersion Minimum="4.12.0" Maximum="5.0.0" OnlyDetect="no" Language="!(loc.LANG)" IncludeMaximum="yes" Property="UPGRADEFOUND" />
</Upgrade>  
<CustomAction Id="PreventDowngrading" Error="Newer version of Sleak Talk is already installed." />
  <InstallExecuteSequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
  <RemoveExistingProducts After="InstallInitialize"  />
</InstallExecuteSequence>

Теперь, как я могу заставить его установить все файлы в установщике после удаления существующего продукта.

Я уже пробовал InstallExecure After = "RemoveExistingProducts" и InstallExecuteAgain After = "RemoveExistingProduct", но безуспешно.


person Anurag Choudhary    schedule 18.04.2014    source источник


Ответы (2)


Правильный ответ - после InstallInitialize, но если это не сработает, у вас проблемы посерьезнее. Например, если вы попробовали это, и он установил только новые файлы с более высокими версиями, тогда ваша основная логика обновления неверна по определению, потому что это БУДЕТ удалять старый продукт перед установкой нового. Так что, возможно, вы не замечаете более старый продукт. Вот правила, предполагающие, что у вас есть надлежащий механизм обнаружения обновлений в вашем файле MSI:

Новый ProductCode и PackageCode. Тот же UpgradeCode. Увеличивайте ProductVersion до первых трех цифр.

и установка для каждого пользователя не будет обновлять каждую машину, и наоборот, и я не думаю, что вы можете обновить 32-битный продукт с помощью 64-битного нового продукта.

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

person PhilDW    schedule 18.04.2014

Хорошо, я попробовал, но сейчас исправление, которое сработало для меня, - это принудительная переустановка всех вещей после удаления.

<Property Id="REINSTALLMODE" Value="amus" />

При переопределении выдается предупреждение при сборке проекта WIX. Идентификатор ресурса является дочерним по отношению к тегу "Продукт".

И как сказано в документации Mirosoft WIX

Помните, как установщик Windows применяет правила управления версиями файлов при замене существующих файлов. Установщик Windows сначала определяет, установлен ли уже ключевой файл компонента, прежде чем пытаться установить какой-либо из файлов компонента. Если установщик находит файл с тем же именем, что и ключевой файл компонента, установленный в целевом расположении, он сравнивает версию, дату и язык двух ключевых файлов и использует правила управления версиями файлов, чтобы определить, устанавливать ли компонент, предоставленный упаковка. Если установщик определяет, что ему необходимо заменить компонентную базу в ключевом файле, он использует правила управления версиями для каждого установленного файла, чтобы определить, заменять ли файл.

Следовательно, не осталось иного выбора, кроме как принудительно переписать это.

person Anurag Choudhary    schedule 19.04.2014
comment
Я бы НЕ рекомендовал этот подход. Он принудительно перезаписывает ЛЮБОЙ файл в целевой системе, который содержит установка - если вы включаете модули слияния, они могут включать системные файлы. В более ранних версиях Windows это может привести к понижению версии системных файлов, а в более поздних версиях может возникнуть ошибка времени выполнения. - person Stein Åsmul; 24.04.2014