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 файлы!