Прежде всего, вы должны исправить свой код обновления:
<?define ProductVersion = "0.0.2.3"?>
<?define UpgradeCode = "PUT-GUID-HERE"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Name="Asd" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Me" Id="*" UpgradeCode="$(var.UpgradeCode)">
Обратите внимание, что код продукта воссоздается каждый раз, когда вы строите установку (не используя GUID, а звездочку).
Основная информация - это версия продукта и код обновления.Код продукта идентифицирует конкретный развернутый выпуск, в то время как код обновления идентифицирует продукт, выпускающий «семейство».Программное обеспечение с одинаковым кодом обновления может переключаться между собой.Программное обеспечение с одинаковыми кодами продукта не может быть установлено вместе.
Ниже приведен трюк для обновления программного обеспечения:
<Upgrade Id="$(var.UpgradeCode)">
<!-- Detect older product versions -->
<UpgradeVersion OnlyDetect="no" IncludeMinimum="yes" IncludeMaximum="yes" Minimum="0.0.1" Maximum="$(var.ProductVersion)" Property="PREVIOUSVERSIONSINSTALLED"/>
<!-- Detect newer product versions -->
<UpgradeVersion OnlyDetect="yes" IncludeMinimum="no" Minimum="$(var.ProductVersion)" Property="NEWERVERSIONDETECTED"/>
</Upgrade>
<!-- Exits successfully in the case newer version are already installed -->
<CustomActionRef Id="WixExitEarlyWithSuccess"/>
Используя вышеуказанную разметку, вы говорите Wix прервать установку, когда оннайти продукт с таким же UpgradeCode , но установленный имеет версию , превышающую текущую, но начать установку (обновить текущую), если он находит продукт с таким же UpgradeCode и установленный имеет версию меньше текущей.
IncludeMinimum и IncludeMaximum должны делатьхитрость, позволяющая при обновлении пропустить текущую версию.
Wix не устанавливает один и тот же продукт: вы должны быть уверены, что код продукта одинаков для установленного программного обеспечения и программного обеспечения MSI: если ониразные, это разные развернутые программы.Помимо этого, если продукт имеет тот же код продукта MSI, установка предлагает варианты восстановления / изменения: чтобы отключить их, вы должны поиграть с таблицей Property пакета Wix, введя *Переменные 1029 * ARP_ (можно отключить восстановление, изменение и удаление, а также настроить контакты производителя и другие свойства).
Вот список переменных ARP .Я не знаю, каково их поведение при установке в режиме без вывода сообщений, но если вы вызываете msiexec из командной строки, есть особая опция восстановления, чтобы выполнить восстановление (/ f), так как он может автоматически восстанавливать ваш продукт, если выне запрашивает?