我有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 什么可以导致上述问题的想法?