Можем ли да надстроим 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 Installer не поддържа напълно? Свойство ProductVersion: Форматът на низа е както следва: major.minor.build   -  person Tom Blodget    schedule 20.05.2013
comment
IMO този формат е твърде произволно мнение.   -  person Christopher Painter    schedule 04.07.2017


Отговори (2)


Разгледайте помощната тема Element MajorUpgrade:

Следното се казва за атрибута AllowSameVersionUpgrades:

Когато е зададено на не (по подразбиране), инсталирането на продукт със същата версия и код за надграждане (но различен продуктов код) е разрешено и се третира от MSI като два продукта. Когато е зададено на „да“, WiX задава атрибута msidbUpgradeAttributesVersionMaxInclusive, който казва на MSI да третира продукт със същата версия като основен ъпгрейд.

Това е полезно, когато две версии на продукта се различават само в четвъртото поле за версия. MSI изрично игнорира това поле, когато сравнява версиите на продукта, така че два продукта, които се различават само в четвъртото поле за версия, са един и същ продукт и се нуждаят от този атрибут, зададен на да, за да бъдат открити.

Имайте предвид, че тъй като MSI игнорира четвъртото поле за версия на продукта, задаването на този атрибут на „да“ също позволява понижаване, когато първите три полета за версия на продукта са идентични. Например, продуктова версия 1.0.0.1 ще надстрои 1.0.0.2998, защото те се разглеждат като същата версия (1.0.0). Това може да въведе отново сериозни грешки, така че най-безопасният избор е да промените първите три полета за версия и да пропуснете този атрибут, за да получите стойността по подразбиране на не.

Този атрибут не може да бъде „да“, когато AllowDowngrades също е „да“ -- AllowDowngrades вече позволява на два продукта с еднакъв номер на версия да се надграждат взаимно.

Отговорът на Тим е 95% верен. Наистина не предлагам смяна само на 4-та версия. Въпреки това има начин да смекчите грешката при случайно понижаване, спомената по-горе. Напишете правило за MajorUpgrade, което не открива същата версия. След това напишете персонализирано действие, което прави допълнителна проверка за продукти, които са по-големи в четвъртото поле, и споделете своя UpgradeCode. Задайте или добавете този открит ProductCode към ActionProperty. Планирайте това персонализирано действие между FindRelatedProducts и RemoveExistingProducts и ще получите желаното поведение, за което Windows Installer никога не е бил проектиран.

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 Installer е проектиран да работи. Ако можете да попречите на властта да приеме това. Но това е глупаво ограничение и може да бъде разширено просто и безопасно. - person Christopher Painter; 20.05.2013