wix生成的更新旧版本的安装程序不会删除文件夹

时间:2014-09-11 06:54:10

标签: wix installer windows-installer major-upgrade

我有WiX生成的2个msi安装程序。第一个(安装程序1)具有版本=“1.0.0.0”,而第二个(安装程序2)具有版本=“1.1.0.0”。它们都有ProductCode =“*”和UpgradeCode =“UpgradeCode”。

安装程序1在%AppData%\ MyApp \ 1.0.0.0文件夹中安装exe文件,并在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上,仅从控制面板中取消先前版本,但其条目仍保留在注册表中,并且文件夹不会被删除。

我使用cmd和以下命令运行安装程序2: 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 行动1:45:29:FindRelatedProducts。搜索相关的应用程序 行动开始1:45:29:FindRelatedProducts。 行动结束1:45:29:FindRelatedProducts。返回值1。

由于某些原因,在Windows 8.1x32上,安装程序2找不到版本1.0.0.0 什么可以导致上述问题的想法?

0 个答案:

没有答案