Wix - 用一个较新的32位MSI替换单独的32位和64位MSI

时间:2014-06-12 14:02:19

标签: wix 32bit-64bit

背景

我们有64位和32位版本的MSI:

  • app.msi
  • app_x86.msi

这些是使用Wix创建的,并为每个MSI定义了单独的upgradeCodes。

我们还有一个WIX捆绑EXE,根据平台决定使用哪个MSI。

问题

64位版本不再存在,我们希望所有升级客户端(MSI或EXE,32位64位)使用32位版本。

我想我还需要2个MSI,每个MSI都匹配旧的升级代码,1个用于32位,1个用于64位但是内容相同....

理想情况下,我有1个MSI可以升级2个不同的升级代码,但我想这是不可能的。

我希望以上内容清楚......我们已经尝试过: - 生成一个32位的dll(app_x86.msi) - 复制到matche以前的64位(app.msi) - 确保两个MSI具有与之前相同的升级代码

但我们最终还是安装了并排安装。

2 个答案:

答案 0 :(得分:2)

因为我需要代码格式化,所以添加另一个答案。 This Wix sample似乎是一个非常好的基本开端。

我没有正确设置此计算机以测试此XML代码,但这样的事情应该有效:

升级X32的表格

<Property Id="PREVIOUSVERSION_X32" Secure="yes" />

<Upgrade Id="YOUR_GUID_X32_EDITION">  
   <UpgradeVersion 
      Minimum="1.0.0" Maximum="99.0.0" Property="PREVIOUSVERSION_X32" 
      IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>

升级X64的表格

<Property Id="PREVIOUSVERSION_X64" Secure="yes" />

<Upgrade Id="YOUR_GUID_X64_EDITION">  
   <UpgradeVersion
      Minimum="1.0.0" Maximum="99.0.0" Property="PREVIOUSVERSION_X64"
      IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade> 

以下是如何在已编译的MSI文件中实现类似升级方案的快照: enter image description here

答案 1 :(得分:1)

您可以向upgrade table添加多个升级代码,并在安装过程中将其卸载。另见this sample

升级代码标识“产品系列”(或技术上与升级代码匹配的许多产品代码),升级表中的每个条目将为与该特定产品代码匹配的所有产品代码定义通用升级策略升级代码。

换句话说,您可以将两个不同的升级代码添加到升级表中,编写其余字段,这应该可行。您可能需要两个ActionProperties。请务必将它们添加到SecureCustomProperties。我相信Wix会自动处理这个问题。如果不这样做,PUBLIC属性值不会从安全客户端PC(大多数具有较新Windows版本的PC)上的客户端传递到服务器安装过程,并且会导致X文件问题。客户端进程以交互式用户权限运行,服务器进程使用LocalSystem(完全系统访问)运行。