WiX Heat.exe Win64组件 - Win64 ="是"

时间:2014-04-08 09:30:02

标签: wix windows-installer

我正在构建一个仅针对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但是这不起作用似乎。

很困惑。

4 个答案:

答案 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 Elementcandle 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中:

  1. 选择项目属性
  2. 选择“工具设置”标签
  3. 在“其他参数(编译器)”中输入:-arch x64