WiX Heat.exe Win64组件-Win64 =“是”(WiX Heat.exe Win64 Components - Win64=“yes”)

问题

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

很迷惑。

回答1

这是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属性添加到每个组件。 此外,我有Platform='x64' -attribute在我的WiX源文件(S),并添加-arch x64 -parameter到的调用candle ,因为你已经在你的问题描述。

回答2

我也有这个问题。 以下是我所做的工作,它对您有所帮助。

1)

在记事本中打开.wixproj文件,然后将PropertyGroup中的Condition-s手动更改为“ x64 ”,而不是“ x86”:

<Platform Condition=" '$(Platform)' == '' ">x64</Platform> ... <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> ... <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> ...

2)

转到配置管理器以获取该解决方案,并确保已选择x64作为Wix项目的平台。

虽然Heat仍然生成不带Win64 =“ yes”的Component节点,但是它可以正常运行并安装到C:\ Program Files!

回答3

Package Element和Candle任务的文档建议使用InstallerPlatform属性:

平台

程序包支持的平台。 不鼓励使用此属性; 而是在Candle.exe命令行或.wixproj MSBuild项目中的InstallerPlatform属性中指定-arch开关。

安装平台

指定程序包的处理器体系结构。 [...]这等效于Candle.exe中的-arch开关。

那是:

<PropertyGroup>
  <InstallerPlatform>x64</InstallerPlatform>
</PropertyGroup>

为了完善起见:如果您要为多个目标平台使用单个WiX项目,则应查看WiX 3.0中的平台标识。

回答4

在Visual Studio中:

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

更多相关内容:请点击查看