WiX Heat.exe Win64 Components - Win64=“yes”

前端 未结 4 1804
独厮守ぢ
独厮守ぢ 2020-12-14 20:14

I\'m building an installer at the moment that targets just 64bit machines. Part of the process involves running Heat.exe to produce a Fragment ele

相关标签:
4条回答
  • 2020-12-14 20:49

    I also had this problem. Below is what I've done and it helped.

    1)

    Open .wixproj file in notepad and manually change Condition-s in PropertyGroup-s to be "x64" instead of "x86":

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

    2)

    Go to Configuration Manager for the solution and make sure that x64 is chosen as the platform for the Wix project.

    Although Heat still generates Component nodes without Win64="yes", but it builds ok and installs to the C:\Program Files!

    0 讨论(0)
  • 2020-12-14 21:11

    Here would be the XSLT-file. Save it as e.g. 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>
    

    Then, in your heat-commandline add the parameter -t <PathToYourFile>\HeatTransform.xslt. This will add the Win64-attribute to every component. Additionally I have Platform='x64'-attribute in my WiX source file(s) and add the -arch x64-parameter to the invocation of candle, as you already described in your question.

    0 讨论(0)
  • 2020-12-14 21:12

    The documentation of the Package Element and candle task suggests to use the InstallerPlatform property:

    Platform

    The platform supported by the package. Use of this attribute is discouraged; instead, specify the -arch switch at the candle.exe command line or the InstallerPlatform property in a .wixproj MSBuild project.

    InstallerPlatform

    Specifies the processor architecture for the package. [...] This is equivalent to the -arch switch in candle.exe.

    that is:

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

    And for completness: If you want a single WiX-Project for multiple target platforms you should have a look at Platform identification in WiX 3.0.

    0 讨论(0)
  • 2020-12-14 21:12

    In Visual Studio:

    1. Select Project Properties
    2. Select "Tool Settings" tab
    3. In "Additional parameters (compiler)" type: -arch x64
    0 讨论(0)
提交回复
热议问题