2014-04-08 3 views
7

저는 64 비트 시스템만을 대상으로 설치 프로그램을 작성하고 있습니다. 프로세스의 일부로 배포 된 응용 프로그램의 일부를 포함하는 Fragment 요소를 생성하기 위해 Heat.exe을 실행해야합니다.WiX Heat.exe Win64 구성 요소 - Win64 = "예"

문제는 열 생산 ICE에 의해 생성되는 구성 요소입니다 : 구성 요소가 32 비트 시스템을 대상으로하는 것이 윅스 불평 80 오류를 내 설치에이를로드하려고 :

<Directory Id="ProgramFiles64Folder"> 

이 문서를 보면 Heat에는 x64 환경을 타겟팅한다고 알리는 데 사용할 수있는 -platform 스위치가 있지만이 설명서 사용 방법에 대한 단서는 없습니다. 나는 시도했다 :

-platform=x64 

-platform=Win64 

아무것도 생성 된 구성 요소에 Win64 속성을 설정하기 위해 출력에 영향을 것 같다. 아무도 알아 냈지? 아니면 내가 틀린 나무를 완전히 짖고 있니?

수확 된 구성 요소를 수동으로 편집하여 Win64="yes"을 추가하면 ICE 오류가 사라집니다.

<Product> 요소에서 나는 candle이 이것을 받아 들여야하며 구성 요소가 기본적으로 x64로 설정되어야한다고 생각하지만 작동하지 않는 것 같습니다.

매우 혼란 스럽습니다.

+0

나는'.wixproj' 파일에서 InstallerPlatform 속성을 사용하여이 작업을하고 있습니다.이것은 커맨드 라인에서'-arch' 스위치를 설정하는 것과 같습니다. – Jammer

+0

그런 경우에 정상적으로 수행 할 작업 : 열 명령 행에 XSLT 파일을 사용하여 각 구성 요소에'Win64 = 'yes' '속성을 추가합니다. 그렇다하더라도 나는 항상'arch' 매개 변수와'platform' 속성을 사용합니다. 적절한 XSLT 파일이 필요한 경우 답변으로 게시합니다 (주석이 너무 짧음). – taffit

답변

8

여기에 XSLT 파일이 있습니다. 예 : HeatTransform.xslt : 당신의 heat에서 다음

<?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> 

는 매개 변수 -t <PathToYourFile>\HeatTransform.xslt를 추가 -commandline. 이렇게하면 모든 구성 요소에 특성 인 Win64이 추가됩니다. 또한 내 WiX 소스 파일에 Platform='x64' -attribute가 있고 질문에 이미 설명 된대로 의 호출에 -arch x64 매개 변수를 추가하십시오.

6

또한이 문제가 발생했습니다. 다음은 내가 한 일이며 도움이되었습니다.

1)

열기 .wixproj 메모장에서 파일을 수동으로 대신 "86"의 "64"로 조건의 PropertyGroup-의에서 변경 :

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

2)

솔루션에 대한 구성 관리자로 이동하여 x64이 Wix 프로젝트의 플랫폼으로 선택되었습니다.

은 여전히 ​​Win64 = "yes"가 아닌 구성 요소 노드를 생성하지만 ok 빌드하고 C : \ Program Files에 설치합니다!

관련 문제