我正在为我们的软件创建一个WIX安装程序,但是我在从先前打包的Windows Installer SW升级时遇到了一些问题。
在介绍问题之前,需要说明的是,从一个WIX打包的SW升级到另一个WIX打包的SW实际上是工作正常的,我能够卸载旧版本并安装新版本。真正的问题出现在旧版本是Windows Installer打包(这是我们当前的解决方案),而新版本是WIX打包的情况下。基本上,我的WIX安装程序无法发现已经安装了旧版本,因此新版本将被安装而不卸载旧版本。
我如何在WIX安装程序和Windows installer之间建立联系:我将WIX的UpgradeCode设置为与Windows installer相同。我还查看了一些在线示例,它们建议我的当前解决方案应该可行。以下是我的.wxs文件的升级部分的一部分内容:
在介绍问题之前,需要说明的是,从一个WIX打包的SW升级到另一个WIX打包的SW实际上是工作正常的,我能够卸载旧版本并安装新版本。真正的问题出现在旧版本是Windows Installer打包(这是我们当前的解决方案),而新版本是WIX打包的情况下。基本上,我的WIX安装程序无法发现已经安装了旧版本,因此新版本将被安装而不卸载旧版本。
我如何在WIX安装程序和Windows installer之间建立联系:我将WIX的UpgradeCode设置为与Windows installer相同。我还查看了一些在线示例,它们建议我的当前解决方案应该可行。以下是我的.wxs文件的升级部分的一部分内容:
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion OnlyDetect="yes" Minimum="$(var.VersionNumber)" Property="NEWPRODUCTFOUND" IncludeMinimum="no" />
<UpgradeVersion OnlyDetect="no" Maximum="$(var.VersionNumber)" Property="UPGRADEFOUND" IncludeMaximum="no" />
</Upgrade>
<CustomAction Id="PreventDowngrading" Error="A software with newer version number is found on this machine" />
<InstallUISequence>
<Custom Action="PreventDowngrading"
After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>
<InstallExecuteSequence>
<Custom Action="PreventDowngrading"
After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
<RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>
需要提一下的是,我们的软件实际上是一个Windows服务,我不确定这是否重要。谢谢您的帮助!