회사에서 WIX(Windows Installer XML)으로 빌드 패키지를 작성하고 Jenkins를 이용하여 설치 파일을 생성하고 있습니다.
며칠 전 고객사에서 설치 파일 수정 요청이 들어왔습니다.
협력사에 프로그램을 배포하려고 하는데 프로그램 복제를 막기위해 프로그램 설치 시 라이선스 코드를 입력받도록 해달라는 것이었습니다.
라이선스를 입력받는 화면이 필요한데 사용자 화면을 추가해본적이 없어 웹 검색을 통하여 얻은 내용을 여기에 기록합니다.
WIX에서는 미리 정의된 몇가지 UI 모드를 지원합니다.
각 UI 모드마다 사용하는 Dialog와 나타나는 순서가 정의되어 있습니다.
사용자 화면을 추가하기 위해서는 WixUI_FeatureTree 모드를 사용하는 것이 좋다고 합니다.
먼저 추가할 사용자 화면을 디자인합니다.
WIX 파일에 직접 XML 형식으로 작성을 해도 되고 Wix Edit라는 툴을 이용하여 작성해도 됩니다.
![]() |
Wix Edit 라이선스 입력 화면을 아래와 같이 디자인했습니다.
UI 섹션에는 Font와 UI Mode에 대한 내용이 꼭 추가되어야 합니다. |
<TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
<TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
<TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
<Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
<Property Id="WixUI_Mode" Value="FeatureTree" />
사용자가 입력한 라인선스 코드를 저장할 속성을 선언합니다.<Property Id="LicenseCode" />
UI에서 사용할 Dialog를 참조합니다. 아래 Dialog는 WIX에서 기본적으로 제공하고 있습니다.
첫번째 Welcome Dialog를 표시합니다.
두번째 우리가 생성한 LicenseDlg가 화면에 표시됩니다. LicenseDlg의 코드는 아래와 같습니다.
Inline Text인 LicenseCode = "XXXXXX"는 사용자가 입력한 라인선스 코드가 XXXXXX 일때만 InstallDirDlg를 표시하도록 제한하고 있습니다.
이외의 코드를 입력하면 다음 화면으로 넘어가지 않습니다.
세 번째는 설치 폴더를 변경할수 있는 InstallDirDlg 입니다.
설명한 내용에 대한 파일은 여기서 다운받으시면 됩니다.
마지막으로 유용한 Youtube 링크를 남깁니다. https://www.youtube.com/watch?v=usOh3NQO9Ms
<DialogRef Id="WelcomeDlg" />
<DialogRef Id="ErrorDlg" />
<DialogRef Id="FatalError" />
<DialogRef Id="FilesInUse" />
<DialogRef Id="MsiRMFilesInUse" />
<DialogRef Id="PrepareDlg" />
<DialogRef Id="ProgressDlg" />
<DialogRef Id="ResumeDlg" />
<DialogRef Id="UserExit" />
<DialogRef Id="CancelDlg" />
<DialogRef Id="InstallDirDlg" />
마지막으로 설치시 나타날 Dialog들에 대한 내용을 기입합니다.첫번째 Welcome Dialog를 표시합니다.
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseDlg" />
위의 내용은 WelcomeDlg를 화면에 표시하고(Publish), "Next" 버튼을 클릭했을때 LicenseDlg를 생성하여 표시(NewDialog)하는 WIX 구문입니다.두번째 우리가 생성한 LicenseDlg가 화면에 표시됩니다. LicenseDlg의 코드는 아래와 같습니다.
<Dialog Id="LicenseDlg" Width="370" Height="270">
<Control Type="Edit" Id="EditLicense" Width="190" Height="15" X="100" Y="5" Property="LicenseCode" />
<Control Type="PushButton" Id="Next" Width="56" Height="17" X="98" Y="20" Text="Next">
<Publish Event="NewDialog" Value="InstallDirDlg">LicenseCode = "XXXXXX"</Publish>
</Control>
<Control Type="PushButton" Id="Back" Width="56" Height="17" X="161" Y="20" Text="Back">
<Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
</Control>
<Control Type="PushButton" Id="Cancel" Width="56" Height="17" X="229" Y="20" Text="Cancel">
<Publish Event="NewDialog" Value="CancelDlg">1</Publish>
</Control>
<Control Type="Text" Id="Label" Width="96" Height="17" X="0" Y="5" Text="Enter the license code : " />
</Dialog>
위 3번째 줄을 보면 "Next" 버튼을 눌렀을때 InstallDirDlg를 화면에 표시하고 있습니다.Inline Text인 LicenseCode = "XXXXXX"는 사용자가 입력한 라인선스 코드가 XXXXXX 일때만 InstallDirDlg를 표시하도록 제한하고 있습니다.
이외의 코드를 입력하면 다음 화면으로 넘어가지 않습니다.
세 번째는 설치 폴더를 변경할수 있는 InstallDirDlg 입니다.
<Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseDlg">1</Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3">"1"]]></Publish>
<Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
<Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
네번째는 VerifyReadyDlg 입니다.<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
<Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed</Publish>
이후에는 UI Mode에서 미리 정의해둔 순서대로 Dialog가 표시됩니다.설명한 내용에 대한 파일은 여기서 다운받으시면 됩니다.
마지막으로 유용한 Youtube 링크를 남깁니다. https://www.youtube.com/watch?v=usOh3NQO9Ms
댓글
댓글 쓰기