Установщик, сгенерированный wix для обновления старой версии, не удаляет папку
У меня есть 2 установщика MSI, сгенерированных WiX. Первый (Установщик 1) имеет версию = "1.0.0.0", а второй (Установщик 2) имеет версию = "1.1.0.0". У обоих из них есть ProductCode = "*" и UpgradeCode= "UpgradeCode".
Установщик 1 устанавливает исполняемый файл в папку%AppData%\MyApp\1.0.0.0, а также записывает запись в реестр в папке SOFTWARE\MyApp\1.0.0.0. Значение записи 1.0.0.0
Ожидаемое поведение установщика 2 заключается в том, что во время установки предыдущая версия (1.0.0.0) будет удалена из панели управления, его запись будет удалена из реестра, а папка будет удалена из%AppData%\MyApp.
Что на самом деле происходит, так это то, что версия 1.0.0.0 не удаляется из панели управления, запись удаляется из реестра, и запись новой версии устанавливается, но папка%AppData%\MyApp\1.0.0.0 остается там, а новая папка 1.1.0.0 создается в %AppData%\MyApp.
Может ли кто-нибудь помочь мне найти, что не так с моим кодом и как я могу его решить?
<Product Id="*"
Name="MyApplication"
Language="1033"
Version="$(var.ProductVersion)"
Manufacturer="MyCompany"
UpgradeCode="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}">
<Package InstallerVersion="200"
Compressed="yes"
Description="Installer for my application"
InstallScope="perUser"/>
<Upgrade Id="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}">
<UpgradeVersion Minimum="$(var.ProductVersion)"
OnlyDetect="yes"
Property="NEWERVERSIONDETECTED"/>
<UpgradeVersion Property="OLDERVERSIONBEINGUPGRADED"
Minimum="1.0.0.0"
IncludeMinimum="yes"
Maximum="$(var.ProductVersion)"
IncludeMaximum="no"/>
</Upgrade>
<Property Id="MSIRESTARTMANAGERCONTROL"
Value="Disable"/>
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>
<Media Id="1"
Cabinet="MyApp.cab"
EmbedCab="yes"/>
<Directory Id="TARGETDIR"
Name="SourceDir">
<Directory Id="AppDataFolder">
<Directory Id="CompanyDir"
Name="MyApp">
<Component Id="CompanyDirComp"
Guid="*">
<RemoveFolder Id="RemCompanyDir"
On="uninstall"
Property="CompanyDir"/>
<RegistryValue Root="HKCU"
Key="SOFTWARE\MyApp"
Name="Uninstall"
Type="string"
Value="$(var.ProductVersion)"
KeyPath="yes"/>
<RemoveRegistryKey Action="removeOnInstall"
Id="cd"
Key="SOFTWARE\MyApp"
Root="HKCU"/>
</Component>
<Directory Id="INSTALLDIR"
Name="$(var.ProductVersion)">
<Component Id="CompanyDirInstallComp"
Guid="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}">
<RegistryValue Root="HKCU"
Key="SOFTWARE\MyApp\$(var.ProductVersion)"
Name="Uninstall"
Type="string"
Value="$(var.ProductVersion)"
KeyPath="yes"/>
<RemoveFolder Id="RemINSTALLDIR"
On="uninstall"
Property="INSTALLDIR"/>
<File Id="myFile.exe" Source="C:\Users\myFile.exe"/>
<RemoveFile Id="RemMyFile"
On="uninstall"
Name="*.exe"/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
</Product>
Обновленный вопрос:
Я протестировал вышеуказанный код на Windows 8.1x32 и Windows 8.1x64. Установщик 2 работает как надо на Windows 8.1x64; во время установки предыдущая версия (1.0.0.0) не удаляется из панели управления, ее запись удаляется из реестра, а папка удаляется из%AppData%\MyApp. В Windows 8.1x32 установщик 2 только удаляет предыдущую версию с панели управления, но ее запись остается в реестре, а папка не удаляется.
Я запустил установщик 2, используя cmd и следующую команду: msiexec /i installer2.msi /l*v log.txt
Вывод Windows 8.1x64: действие 2:45:13: FindRelatedProducts. Поиск связанных приложений Начало действия 2:45:13: FindRelatedProducts. FindRelatedProducts: найденное приложение: {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} MSI (c) (48:7C) [02:45:13:828]: ИЗМЕНЕНИЕ СОБСТВЕННОСТИ: добавление свойства OLDER_VERSION_DETECTED. Его значение равно "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}". Действие завершено 2:45:13: FindRelatedProducts. Возвращаемое значение 1.
Выход Windows 8.1x32: MSI (c) (68:20) [01:45:29:831]: Выполнение действия: FindRelatedProducts MSI (c) (68:20) [01:45:29:831]: Примечание: 1: 2205 2: 3: ActionText Action 1:45:29: FindRelatedProducts. Поиск связанных приложений Начало действия 1:45:29: FindRelatedProducts. Действие завершено 1:45:29: FindRelatedProducts. Возвращаемое значение 1.
По какой-то причине в Windows 8.1x32 установщик 2 не может найти версию 1.0.0.0. Есть идеи, что может вызвать проблему, упомянутую выше?