먼저 솔루션에 Setup Project를 추가한다.
솔루션에 Setup Project 추가된 모습
Setup Project의 속성을 보면 여러가지 다양한 속성들이 있다. 해당 속성들을 패키지에 맞게 값을 수정해준다.
주요 수정 항목
Author : 제조사또는 개발자이름
Manufacture : 제조사명
ProductName : 제품명 (프로그램 추가 삭제리스트에 표시됨)
Title : Setup 시 화면 타이틀에 출력됨
Version : 제품버전
ProductCode : 버전 변경시 갱신해야함
UpgradeCode : Application을 대표하는 Code (버전이 변경되어도 유지되어야 한다.)
- 제품 버전이 변경되더라도 UpgradeCode 는 유지되어야 설치시 업그레이드가 진행된다
패키지 설치 후 프로그램 추가 삭제에 표시되는 모습
Setup Project에서 우클릭 메뉴에서 View를 보면 File System등 메뉴들이 나온다. 이 각각의 메뉴들에서 패키지에서 필요한 작업들을 추가할수 있다.
File System 설정
File System에는 패키지에 포함되어야할 파일들을 추가할수 있고 솔루션의 다른 프로젝트들의 빌드 Output도 추가할수 있다.
먼저 Application Folder를 선택하고 속성에서 보면 DefaultLocation에 기본적으로 설치될 경로가 나오고 이것을 원하는대로 변경해주면 된다.
참고로 기본값에 있는 [Manufacturer] 등 대괄호로 되어있는값은 SetupProject에서 설전한 값이나 시스템 변수값이라고 보면된다. 해당 값을 사용해서 구성해도 되고 고정값을 입력해도됨
이제 패키지에 포함될 리소스 파일들을 우클릭 Add메뉴에서 선택하여 추가한다.
보통은 필요한 폴더및 파일들을 추가하고 솔루션에 포함되어있는 프로젝트들의 Output을 추가한다.
참고로 Visual Studio의 Setup Project에서는 빌드되는 패키지의 최대 사이즈를 2기가까지만 허용한다.
만약 리소스가 2기가가 넘어간다면 일부 파일들을 압축파일로 따로 준비하여 설치시 해당 리소스가 자동으로 적용되로록 해야한다.
프로젝트 Output 화면
프로젝트 Output을 추가하고 나면 해당 프로젝트에 Reference 된 라이브러리들도 함께 패키지에 자동으로 포함된다.
이제 다시 Setup 프로젝트에서 우클릭 메뉴의 속성을 보면 패키지 빌드시 출력될 파일에 대해서 설정을할수 있다.
출력될 msi파일의 이름 및 위치를 설정할수 있고 리소스들을 msi에 포함할것인이 아니면 cab 파일에 리소스들을 포함할것인지 설정이 가능하다.
그리고 중앙에 있는 Prerequisites.. 버튼을 클릭하면 패키지 설치시 자동으로 설치를 부가적인 항목들을 지정할수 있다. 예를 들어 특정 .Net Framewrok 버전을 설치한다던지 또는 2017 재배포 패키지를 설치한다던지등의 필수 설치 항목들을 여기서 지정하면 패키지 설치시 해당 항목들이 제일 먼저 설치가 진행된다.
그리고 하단에 보면 해당 설치 파일들을 어디서 가져올지 옵션이 있는대 첫번째는 설치시 온라인에서 해당 설치파일을 자동으로 다운로드 받아서 설치하겠다는것이고 두번째를 선택하면 빌드하는 환경에서 설치파일을 가져와서 msi파일과 같이 배포할수 있도록 하겠다는 옵션이다.
온라인으로 연결되지 않은 경우의 설치도 대비해야 한다면 두번째 옵션을 선택해야 한다.
web site에서 받도록 하는 첫번째 옵션 선택시 | 내 pc에서 가져오도록 하는 옵션 선택시 |
두번째 옵션인 내 PC에서 설치파일을 가져오도록 하는 옵션을 선택하고 빌드를 해보면 파일이 없다는 에러가 발생할것이다. Visual Studio 2015 에서는 설치시 해당 설치 파일들이 기본적으로 포함이 되어있지 않다.
그래서 MS 홈페이지에서 해당 설치파일을 다운로드 받아서 폴더에 넣어둬야지 두번째 옵션으로 인하여 정상적인 패키징이 가능해진다.
아래의 경로에 가면 위에서 설치항목을 선택하기 위해서 보던 리스트의 폴더들이 있다. (만약 JRE등 본인이 Custom한 설치파일을 여기에 추가하여 적용하는것도 가능하다)
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages
각 폴던안에 보면 폴더와 파일들은 있지만 정작 설치파일은 기본적으로 빠져있기 때문에 해당 설치파일을 다운로드 받아서 해당 폴더안에 저장해둔다.
(주의 사항으로는 이 폴던안에 있는 Product.xml안의 설치파일명과 저장파일명이 일치해야한다.)
이제 추가된 Project Output을 이용하여 설치시 바탕화면에 보여질 Shortcut를 생성한다.
그리고 생성된 Shortcut 을 Desctop과 Programs Menu에 복사하여 이름변경후 저장해둔다.
그리고 해당 파일의 속선에서 Icon을 지정해줘야 정상적으로 아이콘으로 바탕화면에 추가된다.
이제 설치시 사용자에게 보여줄 User Interface를 설정한다.
여기서 불필요한 인터페이스는 제거하거나 필요한것을 추가할수 있다.
간단한 설치파일 이라면 여기서 완료가 되겠지만 설치간에 압축을 풀거나 파일을 복사하는등의 Action이 필요한 경우가 있다. 이런경우에는 직접 코드를 작성하고 해당 코드가 실행이 되도록 Custom Action을 설정할수가 있다.
먼저 솔루션에 기본 Class Library 프로젝트를 추가한다.
그리고 해당 프로젝트에 Installer Class를 추가한다.
그리고 Base calss를 보면 아래와 같이 4개의 가상함수들이 있다. 이 함수들읠 재정의하여 각 단계시 필요한 코드들을 추가해준다.
각 단계들에 대하여 재정의
- Install : 인스톨 시작시
- Commit : 설치 마무리 단계
- Rollback : 설치 취소시
- Uninstall : 제품 삭제시
이제 추가한 Installer Class를 각 단계별로 적용하기 위하여 Setup Project에서 Custom Action을 추가한다.
각 단계에 Add하여 Intaller 프로젝트의 Ounput을 추가함
각 추가된 Ouput의 속성에 CustomActionData를 추가하면 Installer class안에서 해당 인자값을 받아서 사용할수 있다.
값 형태는 /KEY="VALUE" 구조이고 대괄호로 묶인 인자값[TARGETDIR]은 이미 정의된 값이다.
그리고 Installer class의 각 함수에서 인자값을 받아서 여러가지 처리를 할수 있다.
이제 최종 빌드를 해보면 아래와 같이 msi파일과 exe파일이 저장된다. (설정에따라 .net Framewrok등 설치 폴더도 포함됨)
이제 설치를 시작해보면 속성에서 정의했던 기본 설치경로가 나오고 계속 Next를 진행하면 설치가 진행된다.
그리고 설치 진행중에 위에서 추가한 Installer Event의 코드가 실행되는 모습을 확인할수 있다.
(이것을 활용하여 Custom한 Window를 띄워서 사용자가 여러가지 옵션을 선택하는등의 기능을 추가할수 있다.)
설치 완료후 설치 폴더안에 확인해보면 정상적으로 파일들이 저장되어 있고 정상적으로 실행이 된다.
'[====== Development ======] > C#' 카테고리의 다른 글
WPF(XAML) - Layout Class (0) | 2021.01.15 |
---|---|
WPF(XAML) - Frame Class (0) | 2021.01.15 |
Xaml (WPF) (0) | 2021.01.12 |
WPF Code Behind에서 Grid 의 Column Size 변경 방법 (0) | 2021.01.12 |
WPF DynamicResource 적용 및 UI 에 Style 적용 (0) | 2021.01.12 |