WIX安装程序无法从先前安装的Windows安装程序软件升级。

3
我正在为我们的软件创建一个WIX安装程序,但是我在从先前打包的Windows Installer SW升级时遇到了一些问题。
在介绍问题之前,需要说明的是,从一个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服务,我不确定这是否重要。谢谢您的帮助!

1个回答

7
拥有相同的upgradecode并不足够。您还必须检查两个软件包是否具有相同的安装类型,即它们都是按用户或按机器安装的。如果安装类型不同,Windows Installer将跳过旧版本的卸载。

1
感谢您的回复。虽然我没有将Wix安装程序的安装范围设置为perMachine,这与旧的Windows安装程序相同。无论如何,事实证明旧的Windows安装程序是32位SW,而新的Wix安装程序是64位SW。当我使用32位构建WIX安装程序并尝试安装时,它确实成功卸载了旧版本并安装了新版本。 - tete
由于大多数人创建的是32位软件包,我错过了一些东西。另外,正如您可能已经知道的那样,64位软件包无法安装在32位计算机上。 - Bogdan Mitrache
有没有可能强制它不这样做? 我有一个旧的安装程序,它给用户选择要执行的操作,但在以每个用户模式安装时仍会安装在“Program Files”中。他们试图互相安装,这非常混乱。 - Billy ONeal
您是想跳过升级吗?如果是的话,您可以为安装程序生成一个新的升级代码,这样它就不会将旧版本视为需要删除的旧版本。此外,即使您已经设置了每个用户的安装类型,您还需要将默认安装位置更改为每个用户的位置,因为Windows Installer不会自动更改它。 - Bogdan Mitrache

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接