我不相信你将能够拥有一个支持这两种平台的MSI。您需要为x86和另一个x64创建一个 - 好消息是您不需要维护另一个WiX项目来实现此目的。
我过去的做法是在产品定义的开始处有以下几点。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?if $(var.Platform)=x64 ?>
<?define msiProductId = "102F7DF4-19A6-4d3d-987F-FF57A2031593" ?>
<?define win64Flag = "yes" ?>
<?else ?>
<?define msiProductId = "8AE46CAF-220F-4B9F-9527-D4A19A27C45B" ?>
<?define win64Flag = "no" ?>
<?endif ?>
<Product Id="$(var.msiProductId)"
Name="My Product"
Language="1033"
Version="1.0.0"
Manufacturer="Acme"
UpgradeCode="E2575E4A-A62E-4460-B96D-B722C79C8EAA">
<Package InstallerVersion="400"
Compressed="yes"
InstallPrivileges="elevated"
Platform="$(var.Platform)"
/>
<!-- Rest of product definition goes here -->
</Product>
</Wix>
我忘了我在哪里得到了针对每个平台使用不同ProductID的建议。
我创作的“win64Flag”变量获得其他的WiX元素在跨平台的情况下很好地工作。作为一个例子,下面介绍如何使用它来使一个RegistrySearch定义适用于这两个平台,并且应该解决您在查找12-hive层次结构时遇到的问题。
<Property Id="WSE12DIRECTORY">
<RegistrySearch Id="Reg_WSE12DIRECTORY"
Type="raw"
Root="HKLM"
Key="SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0"
Name="Location"
Win64="$(var.win64Flag)"
/>
</Property>
带着所有这些地方,那么它只是路过相关值的“平台”预处理器变量上Candle命令行,或选择在Visual Studio目标平台的情况。
在WiX 3中,不鼓励使用平台属性。他们建议不要使用'-arch'开关来代替蜡烛。 http://wix.sourceforge.net/manual-wix3/wix_xsd_package.htm – Chris 2013-01-04 15:50:38
您可能需要使用sys.BUILDARCH,而不是var.Platform。 – 2014-03-12 18:53:40