관련글

2024.09.24 - [🔨 개발/🏢 C# + Revit API] - Windows 운영체제 환경에서의 소프트웨어 배포: .exe와 .msi 파일의 차이

 

C# + Revit API 카테고리의 첫 글이 배포라는 점이 이상하긴 하지만, 회사에서 개발하던 애드인이 드디어 세상의 빛을 볼 때가 되었다. 비주얼 스튜디오에서 처음으로 Release를 선택해 빌드를 하니 기분이 이상하다. 이제 애드인 사용자들이 쉽게 애드인을 설치할 수 있도록 .msi 설치파일을 만들어 볼까 한다. WiX Toolset이라는 툴을 사용하였다.

 

WiX Toolset 설치 및 Visual Studio 프로젝트 생성

https://wixtoolset.org/

 

WiX Toolset

The most powerful set of tools available to create your Windows installation experience.

wixtoolset.org

상당히 올드해 보이는 홈페이지다. Download 메뉴에 들어가면 설치 방법이 나오는데, 그냥 cmd 창에서 커맨드를 입력해서 설치하고, 잘 설치되었는지 버전을 확인하자.

dotnet tool install --gloabl wix
wix --version

버전을 확인했더니 5.0.1+2f00cbe6 이라는 괴랄한 버전이 나온다. 아마 뒤에 달린건 커밋해시가 아닐까 감히 추측해본다. 그리고나서 비주얼스튜디오로 돌아가서 WiX 프로젝트를 만들면 된다고 하는데... 안뜨네? (이 방법으로도 Visual Studio에서 WiX 프로젝트를 생성할 수 있는 방법을 나중에 찾아봐야겠다.)

https://marketplace.visualstudio.com/items?itemName=WixToolset.WixToolsetVisualStudio2022Extension

적당히 구글링해서 Visual Studio Marketplace에 있는 WiX v3 - Visual Studio 2022 Extension 이란걸 설치했다. 다시 새로운 프로젝트를 생성해보니 Setup Project for WiX v3 라는 템플릿이 뜬다ㅎㅎㅎ. 추후에 설명하겠지만 위의 Extension은 Visual Studio에서 WiX 프로젝트를 생성하기 위한 템플릿 파일만 제공하는 듯 하고, 진짜 알맹이는 나중에 다시 설치하는 과정이 나온다.

 

Product.wxs 파일 수정 및 빌드

프로젝트에는 Product.wxs라는 기본 설치 스크립트 파일이 덩그러니 존재한다. XML 기반의 문법을 갖고 있고 뭔가 주저리주저리 쓰여 있다. 대략적으로 다음과 같은 구조로 파일이 구성되어 있다.

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
	<Product Id="*" Name="SAMOO_evacuationDistanceAnalysis" Language="1033" Version="1.0.0.1" Manufacturer="회사명" UpgradeCode="버전별GUID">

		<Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine" />

		<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

		<Directory Id="TARGETDIR" Name="SourceDir">
			<Directory Id="CommonAppDataFolder">
				<Directory Id="Autodesk" Name="Autodesk">
					<Directory Id="Revit" Name="Revit">
						<Directory Id="Addins2023" Name="Addins">
							<Directory Id="Year2023" Name="2023">
								<Component Id="컴포넌트ID" Guid="컴포넌트GUID">
									<File Id="애드인 DLL ID" Source="빌드 완료된 .dll 파일이 존재하는 경로" KeyPath="yes" />
									<File Id="애드인 매니페스트 ID" Source="매니페스트 .addin 파일이 존재하는 경로"/>
								</Component>
							</Directory>
						</Directory>
					</Directory>
				</Directory>
			</Directory>
		</Directory>

		<Feature Id="ProductFeature" Title="제목" Level="1">
			<ComponentRef Id="컴포넌트ID를 한번 더" />
		</Feature>
	</Product>
</Wix>

 

몇 가지 설명을 추가하자면, Product 태그 내의 UpgradeCode와 Component 태그 내에 Guid가 있는데, Visual Studio의 도구 메뉴에서 GUID 생성을 통해 값을 집어넣으면 된다. 이 때, 두 GUID 값을 별개의 값으로 해주자. UpgradeCode는 프로그램 버전 간 업그레이드를 식별하기 위한 고유값이고, Component의 GUID는 설치된 파일을 고유하게 식별하기 위한 코드라고 한다.

Directory 태그를 통해 애드인 .dll 파일과 .addin 파일이 저장될 위치를 지정할 수 있는데, 태그를 여러 번 nested 해서 사용하기 싫다고 "CommonAppDataFolder\Autodesk\Revit\Addins\2023\" 이렇게 붙여 쓰면 빌드에 실패한다. 귀찮아도 한 스텝씩 내려가주자.

KeyPath는 WiX에서 컴포넌트의 핵심 파일 또는 리소스를 지정하는 데 사용된다. 설치된 구성 요소(컴포넌트)가 올바르게 설치되었는지, 수정, 복구할 때 중요한 기준이 되는 파일이나 리소스를 가리킨다. KeyPath는 .dll 파일 하나에만 설정해주자.

이런저런 설정을 마치고 Visual Studio에서 프로젝트를 빌드하면, 오류가 또 뜬다... WiX Toolset을 깔라는 내용이 또 뜨는데(위에서 설치한 Extension은 Visual Studio 템플릿만 설치해주나보다)

https://github.com/wixtoolset/wix3/releases/tag/wix3112rtm

 

Release WiX Toolset v3.11.2 · wixtoolset/wix3

WiX v3.11.2 is the latest recommended maintenance release of WiX v3.11; it contains mitigations in WiX v3.11 for a vulnerability affecting Microsoft.Deployment.Compression.Cab.dll and Microsoft.Dep...

github.com

나는 여기에서 .exe파일을 통해 설치했다. 그랬더니 빌드 잘 된다...

이제 프로젝트/bin/Release/ 에 생성된 .msi 파일을 더블클릭해서 설치를 테스트하면 끝.

728x90

+ Recent posts