Установщик, сгенерированный 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. Есть идеи, что может вызвать проблему, упомянутую выше?

0 ответов

Другие вопросы по тегам