Можем ли мы обновить 1.0.0.0 до 1.0.0.1 при изменении кода продукта?

Меня просят обновить версию 1.0.0.0 до 1.0.0.1. По умолчанию, когда я тестировал фиктивный установщик, если мы изменим код продукта, и 1.0.0.0, и 1.0.0.1 будут установлены бок о бок.

Но если мы сделаем версию 1.0.1.0 (при изменении кода продукта), она выполнит обновление. Вот мой сегмент обновления:

   <Upgrade Id="{354E9DAE-EB70-4BCC-BD93-AC20ACE3F370}">
     <UpgradeVersion
      Maximum="$(var.ver)"
      Property="DOMAJORUPGRADE"
      MigrateFeatures="yes"
      IncludeMinimum="yes"/>
   </Upgrade>

Вопрос: Есть ли способ обновить 1.0.0.0 до 1.0.0.1?

Собственно, мне дали такой сценарий:

  1. При установке 1.0.0.1 поверх 1.0.0.0 необходимо обновить 1.0.0.0.
  2. При установке 1.0.0.0 поверх 1.0.0.1 1.0.0.0 должен дать сбой.
  3. При установке 1.0.0.1 поверх 1.0.0.1 с другим кодом продукта (возможно только в сборках для разработки) существующий 1.0.0.1 необходимо удалить.

person Farrukh Waheed    schedule 20.05.2013    source источник
comment
Почему существует требование использовать формат версии, который установщик Windows не поддерживает полностью? Свойство ProductVersion: формат строки следующий: major.minor.build   -  person Tom Blodget    schedule 20.05.2013
comment
ИМО, этот формат слишком произвольно настроен.   -  person Christopher Painter    schedule 04.07.2017


Ответы (2)


Ознакомьтесь с разделом справки Элемент MajorUpgrade:

Об атрибуте AllowSameVersionUpgrades говорится следующее:

Если установлено значение «нет» (по умолчанию), установка продукта с одинаковой версией и кодом обновления (но с другим кодом продукта) разрешена и рассматривается MSI как два продукта. Если установлено значение yes, WiX устанавливает атрибут msidbUpgradeAttributesVersionMaxInclusive, который указывает MSI рассматривать продукт с той же версией как основное обновление.

Это полезно, когда две версии продукта отличаются только в поле четвертой версии. MSI специально игнорирует это поле при сравнении версий продуктов, поэтому два продукта, которые отличаются только в поле четвертой версии, являются одним и тем же продуктом, и для обнаружения этого атрибута необходимо установить значение «Да».

Обратите внимание: поскольку MSI игнорирует поле четвертой версии продукта, установка для этого атрибута значения «да» также позволяет переходить на более раннюю версию, если первые три поля версии продукта идентичны. Например, версия продукта 1.0.0.1 будет обновлена ​​до 1.0.0.2998, потому что они рассматриваются как одна и та же версия (1.0.0). Это может привести к повторному появлению серьезных ошибок, поэтому самый безопасный вариант - изменить первые три поля версии и опустить этот атрибут, чтобы получить значение по умолчанию no.

Этот атрибут не может иметь значение yes, если AllowDowngrades также имеет значение yes - AllowDowngrades уже позволяет двум продуктам с одинаковым номером версии обновлять друг друга.

Ответ Тима верен на 95%. Я действительно не предлагаю менять только 4-ю версию. Тем не менее, есть способ смягчить упомянутую выше случайную ошибку перехода на более раннюю версию. Напишите правило MajorUpgrade, которое не определяет ту же версию. Затем напишите настраиваемое действие, которое выполняет дополнительную проверку продуктов, которые больше в четвертом поле, и поделитесь своим UpgradeCode. Установите или добавьте этот обнаруженный ProductCode в свойство ActionProperty. Запланируйте это настраиваемое действие между FindRelatedProducts и RemoveExistingProducts, и вы получите желаемое поведение, для которого никогда не был разработан установщик Windows.

person Christopher Painter    schedule 20.05.2013
comment
Спасибо Кристоферу за такой подробный и продуманный ответ. Кажется, это хорошее решение. - person Farrukh Waheed; 20.05.2013

Нет, потому что MSI игнорирует ревизионную часть номера версии. MSI рассматривает версии 1.0.0.0 и 1.0.0.1 как абсолютно одинаковые, потому что они рассматривают только основные, второстепенные и сборочные биты версий, то есть 1.0.0, которые одинаковы в обеих.

свойство ProductVersion

person Tim Owers    schedule 20.05.2013
comment
На 100% верно с точки зрения того, как был разработан установщик Windows. Если вы можете помешать сильным мира сего принять это. Но это глупое ограничение, и его можно просто и безопасно расширить. - person Christopher Painter; 20.05.2013