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>
참조 >
댓글 영역