Обновления работают нормально, если не было изменено ни одного компонента, но при каждом изменении компонента обновление завершается неудачно, и пользователю необходимо вручную удалить и переустановить.
Некоторые фрагменты:
<Product Id="*" Name="My Application" Language="1033" Version="!(bind.FileVersion.ClientEXE)" Manufacturer="My Company" UpgradeCode="MYGUID-b94a-44eb-8e92-9286f1d89bbd">
<Package Id="*" Description="My Installer" Comments="Copyright My Company 2008" InstallerVersion="200" Compressed="yes" />
<Upgrade Id="MYGUID-b94a-44eb-8e92-9286f1d89bbd">
<UpgradeVersion Language="1033" Property="UPGRADEFOUND" Minimum="0.0.0.0" Maximum="99.99.99.99" IncludeMinimum="yes" IncludeMaximum="yes" />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>
Кроме того, есть некоторые проблемы со следующим разделом реестра, которые иногда не удаляются при удалении, и я не понимаю, почему:
<Component Id="InstalledRegistry" Guid="SOMEGUID-0a17-4c6b-983d-8f3feb3a7724">
<RegistryKey Id="InstalledRegKey" Root="HKMU" Key="SOFTWARE\MyCompany\Client" Action="createAndRemoveOnUninstall">
<RegistryValue Name="Version" Type="string" Value="!(bind.FileVersion.ClientEXE)" KeyPath="yes"/>
</RegistryKey>
</Component>
Это то, что загрузчик проверяет, чтобы узнать, запускать msiexec с «REINSTALL = ALL REINSTALLMODE = vamus» или нет, поэтому, если он был удален, но ключ реестра не был удален, программа установки попытается выполнить обновление и произойдет сбой без вывода сообщений .
Дайте мне знать, если потребуется дополнительная информация
Редактировать: впоследствии возникла другая проблема с обновлением только некоторых файлов. Изменил RemoveExistingProducts на After = "InstallValidate", и это решило эту проблему. Делает его немного медленнее, так как полностью удаляет предыдущую установку, а не просто обновляет измененные файлы (которые, как мне показалось, он не обнаружил должным образом), но выполняет свою работу.