# **wix3msi**
이 파이썬 패키지는 Wix Toolset v3의 MSI 파일 생성 기능을 돕는 윈도우 전용 라이브러리 패키지 입니다.   


## **MSI가 무엇인가?**
MSI는 Microsoft Installer의 약자로서 Windows OS에 개발의 결과물을 설치 형태로 배포하고 싶을 때 사용 할 수 있는 설치 체계이자 파일 포맷의 이름입니다.   
Windows SDK를 받으면 그 안에 Microsoft Windows Installer SDK 구성요소가 존재하며, 이를 통해 설치 파일을 만드는 게 스탠다드 한 접근법입니다.   
다만, 해당 SDK는 파이썬을 공식적으로 지원해주지 않기 때문에 Basic, C++, C# 중 하나의 언어를 사용해서 개발해야 합니다.   


## **파이썬 자체적으로는 MSI를 만들 수 없을까?**
원래 파이썬에서는 별다른 설정없이도 MSI를 만들 수 있도록 msilib 패키지를 배포판에 내장하고 있습니다.   
그러나 msilib는 현재 deprecated 된 상태이며, 파이썬 3.13 이후부터는 아예 배포에서 제거되었습니다.   
참고로 msilib를 사용해보니 msi 파일 생성을 위한 스펙 구현이 생각보다 부실합니다. 실무 사용을 고려하자면 제약이 많습니다.   


## ** MSI를 만들어주는 별도의 파이썬 패키지는 없을까?**
확인을 해봤는데 일단 알아본 바에 의하면 cx_Freeze, pywin32 패키지를 설치해도 MSI 파일을 생성 할 수 있습니다.
다만, 두 패키지 모두 실제 MSI에 대한 활용면에서 아쉬움을 느꼈습니다.
cx_Freeze는 실행가능한 바이너리 파일을 패키징하는 라이브러리로 MSI는 패키징한 라이브러리를 설치버전으로 제공 할 수 있게 한다는 정도의 기능이라 MSI 자체를 활용하는데 있어서 필요 기능을 제공하지 않습니다.   
pywin32는 WindowsAPI의 사용에 목적을 두고 있는 라이브러리로 MSI 자체를 지원한다기보다는 COM 객체 기능을 통해 우회하여 MSI 제작 기능에 접근해서 작업하는지라 배보다 배꼽이 더 큰 경우입니다.   
따라서 사용해볼만한 무료 솔루션을 알아보던 중 현재 Wix Toolset v3 이 오픈소스로서 존재함을 알게 되었습니다.   
> 공식홈페이지: https://wixtoolset.org   
> 문서: https://wixtoolset.org/docs/v3/   
> 다운로드: https://github.com/wixtoolset/wix3/releases   


## **Wix Toolset v3만 사용하면 되지않나? 왜 굳이 wix3msi라는 파이썬 라이브러리를 거쳐서 사용해야 하지?**
기본적으로 MSI 생성을 하려면 Wix는 자체적인 인스톨러 정의 데이터인 WXS 파일을 만들고 다룰 수 있어야 합니다.   
WXS는 XML 포맷의 문서 파일이며 MSI의 기능적 데이터베이스 구축을 대체하는 용도이지만 그만큼 복잡도가 높아 생각보다 학습 곡선이 있는 편입니다.   
즉, 사용자 입장에서는 Wix3를 쓰더라도 MSI 스펙 + WXS 스펙을 이해하지 못하면 인스톨러 개발이 어렵습니다.   
또한 여러가지 설정 등에서 각 셋팅이 변경 될 때마다 WXS를 갱신 해주어야 하는 번거로운 추가 관리비용이 있습니다.   
이 때문에 Wix Toolset v3에서는 이와 관련된 여러 자동화 도구들을 제공하고 있지만 해당 부분은 논리적인 부분이나 상황적인 대처가 필요한 부분이 많아 수작업 비용이 높습니다.
저는 이러한 작업을 매번 반복하는 것으로 제 시간을 낭비하고 싶지 않았기 때문에 제가 쓸 생각으로 도구를 만들려는 생각을 가지게 되었습니다.

사실 주 목적은 제가 사용하는 것이고, 어차피 만드는 김에 이를 모두가 사용할 수 있도록 배포하려고 하는 것입니다.   
당연한 이야기지만, MSI 생성에 대한 핵심 기능을 자체적으로 개발 할 생각은 전혀 없기 때문에 현재 프로젝트는 이미 존재하는 솔루션인 Wix Toolset v3의 사용을 전제로 하려고 합니다.   


## **라이선스**
기본적으로 Wix Toolset v3은 무료 오픈소스 도구이며, 저 또한 Wix Toolset v3 의 소스코드를 수정하거나 제 패키지에 포함시켜 재배포 하지 않습니다.   
wix3msi는 어디까지나 Wix Toolset v3 사용자가 해당 솔루션의 설정파일인 WXS를 편하게 만들 수 있도록 돕는 용도입니다. 모두에게 라이브러리를 무료로 공유하려고 하고요.  
따라서 라이선스 문제는 일어날 수 없습니다.


## **목표 및 개발 방향**
가장 중요한 목적은 파이썬 코딩으로 Wix Toolset v3 + 수작업 보다 편하게 인스톨러를 자동 생성하는 것입니다.
그리고 장기적으로는 WIX3가 구현하고 있는 MSI 생성 스펙을 모두 쉽게 사용할 수 있도록 파이썬으로 구현 할 계획입니다.   
장기적으로 유지보수 할 라이브러리로 생각하고 있으며 어느정도 개발이 되면 문서화도 할 예정입니다.   
MSI와 WIX3를 몰라도 파이썬 개발자가 쉽게 자신의 앱을 윈도우 인스톨러로 배포 할 수 있도록 하는 것이 이 라이브러리의 궁극적 목표입니다.   



## **설치방법**
### **Wix Toolset v3 설치**
1. https://github.com/wixtoolset/wix3/releases 에 있는 압축파일 혹은 실행파일 (설치파일)을 받아주세요.   
2. 압축해제 혹은 설치를 통해 나온 툴셋의 경로를 시스템 환경변수의 PATH에 등록해주세요.   


### **wix3msi 설치**
3. pypi에 올라간 현재 wix3msi 패키지를 설치 해주세요.   
```python
python -m pip install wix3msi
```


### **사용법**
1. 파이썬 코드에서는 다음과 같이 사용합니다. (작성 예정)   
```python
from wix3msi import WXSDocument

```

2. 터미널 명령어는 다음과 같이 사용합니다. (개발 예정)   
```cmd
D:\Github\Project\> wix3msi ...
```