본문 바로가기

Windows/WiX

처음 만들어 본 예제 (+ 삽질 기록)

프로젝트 결과물을 설치파일로 만드는 것 까지 완료했다. Pre-build event에 아래 명령어 추가하고, .wxs 파일을 첨부파일과 같이 작성하면 된다.

Product.wxs

 

"%WIX%bin\heat.exe" project $(SolutionDir)sirius.vcxproj -cg ServerFiles -gg -g1 -sf -srd -pog Binaries -configuration "Debug" -platform "Win32" -o $(ProjectDir)sirius_output.wxs

 

아래는 삽질의 기록...

 

* The directory SomeDirectoryId is in the user profile but is not listed in the RemoveFile table.
<RemoveFolder Id="RemoveSomeDirectoryId" On="uninstall"> 을 추가하면 된다.
http://robmensching.com/blog/posts/2007/4/27/how-to-create-an-uninstall-shortcut-and-pass-all-the
그 다음에 반드시 <Feature>에 모든 <component>를 적어주어야 한다.

* 같은 솔루션 내 다른 프로젝트의 project variable$(ProjectFileName)같은 project variable에 접근하려면 그 프로젝트를 WiX 프로젝트에서 참조해야 한다. 근데 참조를 추가하고 나면 경고가 뜨던데 왜 그런지는 모르겠다.
http://wix.sourceforge.net/manual-wix3/votive_project_references.htm

* HKLM VS HKCU
전체 사용자용으로 프로그램을 설치할 때는 MKLM에 레지스트리를 추가해야 하고, 한 사용자만을 위한 프로그램이라면 HKCU에 추가해야 한다. 단, 바로가기 관련 레지스트리는 유저별로 있는 것이므로 무조건 HKCU로 가야 한다.
http://social.msdn.microsoft.com/Forums/vstudio/en-US/d2286f2a-310d-499e-99c1-efa2ae99ed07/hklm-vs-hkcu

* Heat
프로젝트 파일로 빌드 결과물 리스트를 뽑아주는 고마운애. Pre-build event에 아래와 같이 적어주면 된다.
"%WIX%bin\heat.exe" project $(SolutionDir)sirius.vcxproj -cg ServerFiles -gg -g1 -sf -srd -pog Binaries -configuration "Debug" -platform "Win32" -o $(ProjectDir)sirius_output.wxs
-gg 옵션이 들어있으면 프로그램이 중복 설치될 가능성이 있다. 근데 안쓰면 귀찮아진다.
http://wix.sourceforge.net/manual-wix3/heat.htm
http://blog.martindoms.com/2012/02/27/how-to-include-a-large-directory-tree-in-a-wix-installer-using-a-visual-studio-wix-project/
http://stackoverflow.com/questions/414685/how-to-add-a-whole-directory-or-project-output-to-wix-package

* Heat가 실행이 안될 때(HEAT5301)
이거 적절한 버전의 MSBuild를 찾지 못해서 발생하는 문제다. 나의 경우 VS2010하고 VS2012가 동시에 깔려 있었는데, VS2010지우니 잘 되기 시작했다.

* robocopy
백업용으로 많이 쓰이는 복사 명령어다.
http://joogunking.tistory.com/m/post/view/id/341

* VS2010과 VS2012에서 빌드 이벤트 working directory가 다른 문제
VS2010에서는 프로젝트 파일이 있는 위치가 루트였는데, VS2012에서는 프로그램 실행 경로가 루트로 변경된 것 같다.
꼭 $(SolutionDir) 또는 $(ProjectDir)로 시작하도록 해야할 것 같고, 저런 변수들(proejct variables)는 무조건 따옴표로 둘러쌓아야 디렉토리명에 공백이 있는 경우 빌드 에러가 발생하지 않는다.
http://stackoverflow.com/questions/10063146/prebuild-event-copy-command-exits-with-code-1

* Orga
MSI 파일(실제로는 DB 파일임)의 내용을 볼 수 있게 해주다. 추가로 MSI 설치 순서 또한 볼 수 있다.
http://www.microsoft.com/en-us/download/details.aspx?id=3138

* WiXUI_minimal에서 EULA 없애기
딱 그 화면만 빼는 방법은 없고, 다 지운 다음 하나씩 추가해야 한다.
http://stackoverflow.com/questions/597025/how-to-build-a-minimal-wix-installer-ui-without-a-license-page
근데 이렇게 하면 프로그램이 설치된 상태에서 MSI를 다시 실행했을 때 remove가 나타나는 것 까지 없어진다.