우선 필자는 InstallShield를 하루정도밖에 다뤄보지 않은 초짜임을 밝힙니다.
필자의 지식이 잘못됐을 수도 있다는 얘기입니다.
만든 프로그램 배포를 설치파일로 달라는 요청이 들어왔다.
패키징 작업하는 툴을 찾아보니, InstallFactory, NSIS, InstallShield 등의 프로그램이 존재한다.
필자는 프로그램파일과 이 프로그램 사용을 위한 추가 설치파일 3개가 존재했다.
이를 모두 합쳐 설치파일 하나로 만들면서 설치 중간에 다른 설치파일들이 실행되게 하는게 목적이다.
InstallFactory나, NSIS 등 무료 소프트웨어는 다른 설치파일 실행을 추가하는 기능이 없는걸로 보인다.
그래서 고급져보이는 InstallShield를 택했는데...
이건 뭐 악마의 프로그램인가 뭐가 이리 어려운지...
단순히 파일이나 폴더들을 묶어서 하나의 설치파일로 만드는건 아주 간단하다.
기능중 Project Assistant가 있는데 UI 화면을 따라서 진행하다 보면 뚝딱이다.
하지만 추가 설치파일을 실행하는 기능이 필요한 필자는 다름 작업들이 필요한 상황이였다.
인터넷에 정보도 많지 않은듯 하고, 데브피아의 InstallShield 게시판은 망했는지 최근 글이 휑했다.
어쨋든, 추가 설치파일을 실행하는 방법을 정리한다. 성공하고 보니 무지 간단하다.
1. 프로젝트를 새로 생성한다.
- InstallScript Project로 선택한다.
- MSI Project를 사용하면 좀 더 디테일한 설정이 가능한듯한데, 복잡해서 패스.
2. Project Assistant에서 아래 아이콘 중 Application Information을 선택한다.
- 적당히 회사이름과 프로그램이름, 버전, 홈페이지 등을 입력한다.
3. Project Assistant에서 아래 아이콘 중 Installation Architecture를 선택한다.
- 이는 프로그램이 설치될 때, 항목을 나누는 건데 프로그램 하나 이므로 이름만 변경하고 넘어간다.
- Feature 하나가 항목 하나이다.
- 흔히 설치프로그램에서 뭐뭐 설치할지 선택하는 그 항목이다.
4. Project Assistant에서 아래 아이콘 중 Application Files를 선택한다.
- 실제로 설치할 파일 및 폴더들을 지정하는 부분이다.
- Application Target Folder가 빨간색으로 체크되어 있는데, 이 폴더가 실제 설치될 폴더이다.
- 설치될 때 경로는 [회사명]/[프로젝트명]/[Application Target Folder 내용] 으로 된다.
- 다른 폴더의 활용 용도는 잘 모르겠다.
- 아래 그림처럼 실행파일과, 사용하는 폴더를 추가해 주었다.
4-1. 파일을 추가할 때 exe를 확장명으로 가지는 파일이 있으면 아래와 같은 창이 발생한다.
- 실행파일의 의존성 검사를 수행한다는 내용인데 필요없으므로 No를 선택한다.
4-2. 폴더를 추가하면 아래와 같은 창이 발생한다.
- Dynamic Link를 사용하겠냐하는데, 자세히는 모르겠으나, 링크 걸면 다른 시스템에 갔을 때 사용 못할꺼 같은 느낌이 들므로 No를 선택
5. Project Assistant에서 아래 아이콘 중 Application Shortcuts를 선택한다.
- 숏컷. 잘 알다시피 단축아이콘이다.
- 앞에서 파일 추가할 때, exe 파일이 있으면 자동으로 등록된다.
- 필요한 실행파일만 두고, 나머지는 제거하자.
6. Project Assistant에서 아래 아이콘 중 Application Registry를 선택한다.
- 프로그램에 레지스트리를 사용해야 한다면 여기서 작업할 수 있다.
7. Project Assistant에서 아래 아이콘 중 Installation Interview를 선택한다.
- 설치프로그램 진행 중에 발생하는 페이지들에 대한 정보이다.
- 라이센스 동의 창
- 사용자/회사명 입력 창
- 설치경로 수정 창
- 전체설치/사용자정의설치 창
8. Project Assistant에서 아래 아이콘 중 Installation Localization를 선택한다.
- 설치프로그램 언어 설정으로 추정된다.
- 한국어로 두고 진행했다.
9. Project Assistant에서 아래 아이콘 중 Build Installation를 선택한다.
- 최종 빌드 창이다.
- 빌드 전에 결과물을 테스트해보고 싶으면 상단의 빨간색 느낌표를 클릭하면 컴파일 & 빌드 & 실행한다.
- 프로젝트 폴더의 폴더 구조를 보면 감이 오겠지만 컴파일 및 빌드로는 모든내용을 압축한 하나의 설치파일이 생성되지 않는다. 여기서 "Build Installation" 버튼을 클릭해야지 하나의 설치파일이 생성된다.
- Single Executable을 선택하고 Build 하면 exe 확장명을 가지는 설치파일이 아웃풋으로 생성된다.
- 다른건 안해봐서 모르겠다.
- 결과 파일의 경로는 프로젝트 폴더에서 Media/SINGLE_EXE_IMAGE/Package 이다.
여기까지 하면 프로그램을 설치파일로 만드는 작업이 끝이다.
자 그럼 이제 가장 중요한 추가설치 파일 사용하는 방법을 알아 본다.
상단의 Installation Designer 탭을 선택하면 아래와 같은 화면이 나오는데, 좌측 트리에서 Behavior and Logic의 InstallScript를 선택하자.
Setup.Rul 이 파일이 가장 중요한데, 설치를 어떻게 진행할지에 대한 내용이 이 파일에 스크립트로 다 구현되어 있다.
자 이제부터 여기를 수정해야하는데, 코드의 상단을 보면 콤보박스가 두개 있다.
왼쪽 콤보박스를 클릭하면, 설치 진행시점을 나눠져있다.
Initialization : 설치 프로그램 시작
Before Move Data : 내용물 카피 전
Move Data : 내용물 카피 중
After Move Data : 내용물 카피 후
Miscellaneous : 모름
Advanced : 모름
Dialog Source : 모름
어쨋든 이 콤보박스를 선택하면 우측 콤보박스에 사용가능한 함수들이 나타난다.
이를 선택하면 아래 코드페이지에 자동으로 추가되고, 기존 내용이 있던 함수들은 내용까지 추가된다.
자 필자는 설치가 종료된 후 3개의 설치파일을 실행하려고 한다.
이 이유 중 하나로, VC++ 2013 재배포 패키지가 설치파일 중 하나인데, 이 파일은 다른 설치프로그램이 진행 중이면 설치가 불가능하다.
그래서 좌측 콤보박스는 "After Move Data"를 선택하고 함수는 "OnFirstUIAfter"를 선택했다.
아 여기서 비교할게 있는데
OnFirstUIAfter : 프로그램이 설치일 때 호출
OnMaintUIAfter : 프로그램이 수정/제거일 때 호출
필자는 프로그램을 최초에 설치할 때만 추가 패키지를 설치하면 되므로 OnFirstUIAfter를 선택했다.
이제 추가 코드를 살펴보자.
STRING sMsiExe, sParam; sMsxmlPath = TARGETDIR + "\\Prerequisite\\msxml\\msxml.msi"; sMsiExe = "C:\\Windows\\System32\\msiexec.exe"; MessageBox ("Install the required libraries to use the program.",INFORMATION); // MSXML install // VC++ 2013 redistribute install // Tcl install |
STRING은 변수를 선언한것이다.
추가 설치파일의 경로를 지정해 줘야하는데, 원래 SUPPORTDIR 등을 사용하여 쓰는것 같던데, 필자는 초짜이므로 프로그램 설치할 때, Prerequisite 폴더를 만들어 추가 설치파일을 포함시켰다.
그러므로 경로는 TARGETDIR\Prerequisite\파일명 이 된다.
여기서 TARGETDIR은 프로그램이 설치될 경로이다.
경로가 정해졌으면 실행하는 함수인 LaunchAppAndWait을 호출한다.
if (LaunchAppAndWait (sVCredistPath, "", WAIT) < 0) then
MessageBox ("Failed to install VC++ 2013 redistribute package.",SEVERE);
endif;
이렇게 하면 설치파일이 실행된다.
근데 또 문제는 msi 확장명을 가진 설치파일이다.
필자의 경우 msxml 라이브러리를 사용해서 설치해줬어야 하는데, 이 파일이 msi 확장명이다.
위와 같은 방식으로 msi 설치파일을 실행하려고 하면 실패된다.
인터넷 검색하다 알아낸 사실인데, msi 파일은 그냥 실행되는것처럼 보이지만 사실은 msiexec 프로그램을 통해서 실행된다는것이다.
이 파일은 Window/System32 폴더 안에 있다.
따라서 이 파일을 실행시키게 하고 옵션으로 경로를 주었다.
실제로 cmd 창을 켜서 msiexec.exe /i [설치파일경로]를 실행하면 설치파일이 실행되는걸 볼 수 있다.
어쨋든 이렇게 하면 추가설치 파일까지 포함시키는데 성공이다.
근데, 추가설치파일 설치전에 시스템에 설치되었는지 유무를 파악해서 없을 때만 설치하고 싶은데,
설치유무 알아내는 방법을 아직 몰라서 구현하지 못하고 있다.ㅜㅜ
추가.
프로그램 설치 이외에 별도의 경로에 파일을 복사하고 싶으면 아래처럼 사용한다.
sTclFile1 = TARGETDIR + "\\Prerequisite\\tcl\\pkgIndex.tcl";
sTarget = "C:\\Tcl\\lib";
XCopyFile(sTclFile1, sTarget, COMP_NORMAL);
'Tools' 카테고리의 다른 글
Eclipse - 이클립스 단축키 (0) | 2016.09.01 |
---|---|
Word - 문서가 저장되었지만 저장할 공간이 충분하지 않기 때문에 음성 인식 데이터가 손실되었습니다. (0) | 2016.09.01 |
Office - 변경 내용 추적 기능 (0) | 2016.09.01 |
Eclipse - 프로젝트 import시 "Invalid preject description." 에러 (0) | 2016.09.01 |
MySQL - 리눅스 mysql에서 bind ip 설정 (0) | 2016.09.01 |