WiX Heat.exe Win64 компоненты-Win64= " да"

Я создаю установщик на данный момент, который нацелен только на 64-битные машины. Часть процесса включает в себя запуск Heat.exe для производства Fragment элементы, содержащие часть развернутого приложения.

проблема заключается в том, что компоненты, которые производятся с помощью тепла, производят лед: 80 ошибок, которые жалуются на WiX, что компоненты нацелены на 32-битные системы, и мой установщик пытается загрузить их в:

<Directory Id="ProgramFiles64Folder">

глядя на документацию есть -platform переключатель, который можно использовать, чтобы сказать Heat что мы ориентируемся на среду x64, однако в документации нет подсказки о том, как использовать этот переключатель. Я пробовал:

-platform=x64

-platform=Win64

ничто не влияет на вывод, чтобы установить Win64 атрибут для сгенерированных компонентов. Кто-нибудь понял это? Или я лаю не на то дерево?

если я вручную отредактирую собранные компоненты, чтобы добавить Win64="yes" ошибка льда идет прочь.

в своем <Product> элемент у меня есть Platform="x64" как я понимаю candle должен принять это и выяснить, что компоненты должны быть установлены в x64 по умолчанию, но это не работает.

очень смущает.

2 ответов


здесь будет 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'-атрибут в моем исходном файле(файлах) WiX и добавьте -arch x64-параметр для вызова candle, как вы уже описали в своем вопросе.


У меня также была эта проблема. Ниже то, что я сделал и это помогло.

1)

открыть .wixproj все файл в блокноте и вручную изменить условие-s в PropertyGroup-s, чтобы быть"х64" вместо "x86":

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

2)

перейдите в Configuration Manager для решения и убедитесь, что х64 выбирается в качестве платформы для проекта Wix.

хотя тепло все еще генерирует узлы компонентов без Win64= "yes", но он строит ok и устанавливает в C:\Program файлы!