我正在构建一个仅针对64位计算机的安装程序。该过程的一部分涉及运行Heat.exe
以生成包含已部署应用程序的一部分的Fragment
元素。
问题是由热量产生的组件产生ICE:80错误,WiX抱怨组件以32位系统为目标而我的安装程序正在尝试将这些组件加载到:
<Directory Id="ProgramFiles64Folder">
查看文档时,可以使用-platform
开关告诉Heat
我们的目标是x64环境,但文档中没有关于如何使用此开关的线索。我试过了:
-platform=x64
-platform=Win64
为了在生成的组件上设置Win64
属性,似乎没有任何效果影响输出。有没有人想到这个?或者我是否完全咆哮错误的树?
如果我手动编辑收集的组件以添加Win64="yes"
,ICE错误就会消失。
在我的<Product>
元素中我有Platform="x64"
我理解它candle
应该采取这个并确定组件应该默认设置为x64但是这不起作用似乎。
很困惑。
答案 0 :(得分:13)
这是XSLT文件。保存为例如HeatTransform.xslt
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
xmlns="http://schemas.microsoft.com/wix/2006/wi"
exclude-result-prefixes="wix">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="wix:Wix">
<xsl:copy>
<!-- The following enters the directive for adding the config.wxi include file to the dynamically generated file -->
<!--xsl:processing-instruction name="include">$(sys.CURRENTDIR)wix\config.wxi</xsl:processing-instruction-->
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<!-- ### Adding the Win64-attribute to all Components -->
<xsl:template match="wix:Component">
<xsl:copy>
<xsl:apply-templates select="@*" />
<!-- Adding the Win64-attribute as we have a x64 application -->
<xsl:attribute name="Win64">yes</xsl:attribute>
<!-- Now take the rest of the inner tag -->
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
然后,在heat
- 命令行中添加参数-t <PathToYourFile>\HeatTransform.xslt
。这会将Win64
- 属性添加到每个组件。
此外,我的WiX源文件中包含Platform='x64'
- 属性,并将-arch x64
- 参数添加到candle
的调用中,如您在问题中所述。
答案 1 :(得分:11)
我也有这个问题。 以下是我所做的并且有所帮助。
1)
在记事本中打开 .wixproj 文件并手动将PropertyGroup-s中的Condition-s更改为&#34; x64 &#34;而不是&#34; x86&#34;:
<Platform Condition=" '$(Platform)' == '' ">x64</Platform> ... <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> ... <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> ...
2)
转到Configuration Manager获取解决方案,并确保选择 x64 作为Wix项目的平台。
虽然 Heat 仍会生成没有Win64 =&#34;是&#34;的组件节点,但它构建正常并安装到C:\ Program Files!
答案 2 :(得分:1)
Package Element和candle task的文档建议使用InstallerPlatform
属性:
平台
程序包支持的平台。不鼓励使用此属性; 而是在Candle.exe命令行或 .wixproj MSBuild项目中的InstallerPlatform属性。
InstallerPlatform
指定程序包的处理器体系结构。 [...] 这是 等同于Candle.exe中的-arch开关。
即:
<PropertyGroup>
<InstallerPlatform>x64</InstallerPlatform>
</PropertyGroup>
为完善起见:如果您想要一个用于多个目标平台的WiX项目,则应查看Platform identification in WiX 3.0。
答案 3 :(得分:1)
在Visual Studio中: