2012-06-20 64 views
2

我正在为我们的软件创建WIX安装程序,现在我从以前的Windows Installer打包软件升级时遇到了一些问题。WIX安装程序无法从以前安装的Windows安装程序升级SW

在问题出现之前,从一个WIX打包软件升级到另一个WIX打包软件实际上工作正常,我可以卸载旧版本并安装新版本。当旧版本是Windows Installer打包(这是我们当前的解决方案)并且较新版本是WIX打包时,会出现真正的问题。基本上我的WIX安装程序无法发现已经安装了旧版本,所以新版本将在不卸载旧版本的情况下安装。

我如何建立WIX安装程序和Windows安装程序之间的连接:我将WIX的UpgradeCode设置为与Windows安装程序一样。我也在网上查看一些例子,他们建议我现在的解决方案应该可以工作。这是我.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> 

有一件事可能是值得一提的是我们的SW实际上是一个Windows服务,我不知道这是否重要。谢谢你的帮助!

回答

7

拥有相同的升级代码是不够的。您还必须检查这两个软件包具有相同的安装类型,即它们都是按用户或每台计算机安装的。如果安装类型不同,Windows安装程序将跳过删除旧版本。

+1

谢谢您的回复。虽然我没有将我的Wix安装程序安装范围设置为perMachine,这与旧版Windows安装程序相同。无论如何,事实证明,旧的Windows安装程序是一个32位SW,新的Wix安装程序是一个64位SW。当我用32位构建WIX安装程序并尝试安装时,它确实会成功卸载旧版本并安装。 – tete

+0

我错过了大多数人创建一个32位软件包。另外,你可能知道64位软件包不能安装在32位机器上。 –

+0

是否有可能强迫它不这样做?我有一个老的安装程序,可以让用户选择做 - 但是仍然安装在“程序文件”中的每用户模式下。他们试图安装在彼此之上,并且一塌糊涂。 –