상세 컨텐츠

본문 제목

WiX Toolset - 자동폴더구성 (heat.exe)

카테고리 없음

by 힐둔 2024. 2. 18. 16:43

본문

WiX 3.11에서 확인 작성되었습니다.

 

많은 파일이 포함되어 있는 프로젝트의 경우, 한땀 한땀 작성하다 보면 시간과 오류가 발생할 확률이 크다, 

이 문제를 해결해기 위해 자동으로 생성해주는 Tool 인 heat.exe를 제공하고 있다. Heat는 폴더를 보고 그 안에 있는 모든 파일을 평가하고 모든 파일을 설치하는데 필요한 구성요소를 정의해줍니다.

 

C:\Program Files (x86)\WiX Toolset v3.11\bin\heat.exe 에 있고, 원하는 곳에서 사용하려면 PATH를 설정 해주면 된다.

Windows10기준 :  (바탕화면) 내 PC > 마우스 오른쪽 버튼 > 속성 > 고급 시스템 설정 > 고급 > 환경변수 > 시스템 변수 목록에서 PATH를 찾고, C:\Program Files (x86)\WiX Toolset v3.11\bin\를 추가.

 

general syntax

heat.exe harvestType harvestSource <harvester arguments> -o[ut] sourceFiles.wxs

 


 

아래와 같이 Test1.txt, Test2.txt, Test3.txt이 있는 Testing_Heat 폴더가 만들어 두자.

 

CASE #1> heat.ext dir "C:\Testing_Heat" -out ".\HeatFile.wxs" 를 입력하면 다음과 같은 출력이 나온다.

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="TARGETDIR">
            <Directory Id="dir38A6B94A55C1CA6F17AF72ADC52A6DBE" Name="Testing_Heat" />
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="dir38A6B94A55C1CA6F17AF72ADC52A6DBE">
            <Component Id="cmp412A0F156198A904E08BAD62798E9040" Guid="PUT-GUID-HERE">
                <File Id="filD3AB479F6FC048DD35542912379125EF" KeyPath="yes" Source="SourceDir\Test3.txt" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="dir38A6B94A55C1CA6F17AF72ADC52A6DBE">
            <Component Id="cmp874424846728A79118411FBC5638AD33" Guid="PUT-GUID-HERE">
                <File Id="fil05308F14B9AF775E569130938A1E26EF" KeyPath="yes" Source="SourceDir\Test1.txt" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="dir38A6B94A55C1CA6F17AF72ADC52A6DBE">
            <Component Id="cmpF0957E8EA28E012F21BE94CBF57600CE" Guid="PUT-GUID-HERE">
                <File Id="filB99BE09CA42546F3A65FDBA1E96A3B91" KeyPath="yes" Source="SourceDir\Test2.txt" />
            </Component>
        </DirectoryRef>
    </Fragment>
</Wix>

 

여기에서의 문제점은 다음과 같다.

1) Testing_Heat 이라는 폴더명을 가진 폴더가 생성된다.

2) Guid 값이 "PUT-GUID-HERE"로 나온다.

3) file의 Source attribute가 SorceDir 안의 각 파일로 나온다.

4) 이러한 모든 구성 요소가 ComponentGroup 으로 그룹핑 되었으면 좋겠음.

 

그래서 몇가지 인수를 더 추가해봅니다.

heat dir "C:\Testing_Heat" -dr MyProgramDir -cg NewFilesGroup -gg -g1 -sf -srd -var "var.MyDir" -out "HeatFile2.wxs"

Argument what it does
-cg <ComponentGroup> ComponentGroup의 이름으로 Heat가 Component를 그룹핑
-dr <DirectoryName> DirectoryName 하위에 Component들이 복사됨
-gg GUID 생성
-g1 GUID에 중괄호 없애기
-sfrag 기본적으로 Heat는 각 Component와 Directory 구조를 별도의 Fragment 요소에 넣는데, 이를 동일한 Fragment에 넣어줌.
-srd 파일이 있는 폴더를 수집할 이유가 없으므로
-var <VarName> VarName란 이름으로 SourceDir에 추가 됨. 향후 VarName은 설정해줘야 함.

 

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="MyProgramDir" />
    </Fragment>
    <Fragment>
        <ComponentGroup Id="NewFilesGroup">
            <Component Id="cmp6E6E0088162FB06CBCEA9A4AA7CBC603" Directory="MyProgramDir" Guid="42999FA2-B476-4972-A2A4-A343108A3353">
                <File Id="filCA67D5B125E878518FEA8F7FB62EF550" KeyPath="yes" Source="$(var.MyDir)\Test1.txt" />
            </Component>
            <Component Id="cmpC3D97EF2ADF77EB61AEF04285A25C2D2" Directory="MyProgramDir" Guid="6A3CB8CB-E7A6-42B2-9C60-56D6279B3450">
                <File Id="filA2FD0B78B439D62B0C28A829A9508C01" KeyPath="yes" Source="$(var.MyDir)\Test2.txt" />
            </Component>
            <Component Id="cmp5B1A530DE50F4D3437F2171E2CAB91A6" Directory="MyProgramDir" Guid="FE272604-7A5C-4CAE-93D7-27C642D32E17">
                <File Id="fil3C980C5A1D26D4B12D481104B14E98D2" KeyPath="yes" Source="$(var.MyDir)\Test3.txt" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

 

Component가 그룹화 되어 있고, Component의 GUID가 있으며 내가 만드는 MyProgramDir 폴더에 설치되고, File은 Source에서 $(var.MyDir) 변수를 사용합니다. 이 구성요소를 사용하고 싶다면 아래 처럼 ComponentGroupRef에 ComponentGroup의 Id를 적어주면 된다. 

<Feature ID="ProductFeature"
         Title="Main Product"
         Level="1">
<ComponentGroupRef Id="NewFilesGroup" />
</Feature>

 

 

참조 > 

https://github.com/PacktPublishing/WiX-3.6-A-Developer-s-Guide-to-Windows-Installer-XML/tree/master/Chapter%202/Heat%20example

댓글 영역