NSIS (Nullsoft scriptable Install System)
인스톨러는 파일을 복사하거나 업데이트하며 레지스트리 키를 쓰고, 설정을 구성하고, 바로가기를 생성한다. 이러한 작업들은 사용자 편의를 위해 자동으로 수행해준다.
NSIS는 이런 인스톨러를 구축할 수 있도록 도와주는 제작 도구이다. NSIS는 파일 복사 등 같은 기본 작업부터 레지스트리 키 등록 작업, 환경 변수 설정, 최신 파일 다운로드, 구성 파일 수정 등과 같은 복잡한 작업까지 지원한다.
NSIS는 스크립트 언어 기반이며 외부 플러그인도 지원하기 때문에 많은 기능을 제공하고 모든 파일과 설치 스크립트를 하나의 실행 파일로 컴파일하여 배포할 수 있다. 이런 다양한 옵션을 제공함에도 작은 오버헤드 크기를 갖는다.
※위에서 간략하게 NSIS를 설명하면서 특징도 설명하였지만 구체적인 특징을 나열해보자면 다음과 같다.
NSIS 특징
- 자체 실행 가능한 installer이 생성되고 installer에 의해 uninstaller이 생성되어 uninstall을 지원한다.
- 다양한 프로젝트를 단일 installer로 통합하거나 자동으로 installer 빌드를 생성한다. 다양한 릴리즈(lite, full 버전 등)를 생성할 수 있다.
- 단일 installer로 다국어 인터페이스를 지원할 수 있다. 또한 사용자 정의 언어 또한 생성할 수 있고, 유니코드도 지원한다.
- LZMA(7zip), ZLIB, BZIP2 데이터 압축 알고리즘 지원
7zip 압축 알고리즘은 높은 압축 효율을 보여준다. 또한 자동 압축해제 모듈이나 다른 애플리케이션을 따로 사용하지 않아도 된다. 7zip(7z) 방식 => 2GB 이상의 대용량 배포의 문제점을 해결해줌 - UI 사용자 정의 가능 (다이얼로그, 글꼴, 배경화면, 아이콘, 문자열, 체크마크, 이미지 등)
- 클래식 및 모던 마법사 인터페이스 제공
- 페이지 시스템: 표준 마법사 페이지 또는 사용자 정의 페이지 추가
- 설치 구성요소의 사용자 선택 및 트리 뷰 지원
- 다중 설치 구성 (최소 설치, 표준 설치, 전체 설치 등) 및 사용자 정의 구성
- 텍스트 또는 RTF 포맷으로 라이선스 계약서 표시
- 레지스트리로부터 대상 디렉터리 감지
- 쉬운 플러그인 시스템 사용
사용자 정의 다이얼로그, 인터넷 연결, HTTP 다운로딩, Win32 API 호출 등을 위한 많은 플러그인 포함 - 자동화 설치를 위한 백그라운드(silent) 모드 지원
- 정의된 심볼, 매크로, 조건부 컴파일, 미리 정의된 표준을 지원하는 전처리기
- 사용자 변수, 스택, 실제 흐름 제어 등을 포함한 멋진 PHP 및 어셈블리 코딩 스타일
- installer에 최적화 된 스크립트 언어를 기반으로 한다. 다음과 같은 기능을 제공한다.
- 파일 추출 (덮어쓰기 매개변수 포함)
- 파일/디렉터리 복사, 이름 바꾸기, 삭제, 검색
- 플러그인 DLL 호출
- DLL/ActiveX 컨트롤 등록, 등록 해제
- 실행 파일 실행 가능 (쉘 실행 및 대기 옵션)
- 바로가기 생성
- 레지스트리 키 읽기/설정/열거/삭제
- INI 파일 읽기/쓰기
- 제네릭 텍스트 파일 읽기/쓰기
- 강력한 문자열 및 정수 조작
- 클래스 이름 및 타이틀에 기반한 Window 찾기
- UI 조작 (글꼴/텍스트 설정)
- Window Message(WM) 보내기
- 메시지 박스 또는 사용자 정의 페이지 기반 UI
- 분기문, 비교문 등.
- 오류 체킹
- 재부팅 후 삭제 또는 이름 바꾸기를 포함한 재부팅 지원
- 인스톨러 동작 명령 (show/hide/wait 등)
- 스크립트 내 사용자 정의 함수
- 사용자 액션에 대한 콜백 함수
- 작은 오버헤드
- 어떠한 사용에 대해서도 완전한 무료.
NSIS 인스톨러를 생성하기 위해서는 NSIS 스크립트를 먼저 작성해야 한다. NSIS 스크립트는 특수한 문법을 적용한 단순한 텍스트 파일이다. 어떠한 텍스트 편집기로도 이 스크립트를 편집할 수 있다.
(NSIS는 스크립트 오류가 발생했을 때, 줄번호를 통해 오류의 위치를 알려주므로 줄 번호를 보여주는 텍스트 편집기를 사용할 것을 권장한다.)
스크립트 파일의 기본 확장자는 .nsi 이고 헤더 파일은 .nsh 확장자를 갖는다.
헤더 파일은 코드를 하나 이상의 블럭으로 분리하여 스크립트의 모듈화를 구현한다. 함수나 매크로를 헤더에 작성한 후 스크립트에 포함시키면 유지 보수를 쉽게 하고 스크립트 가독성을 올려준다. 스크립트에 헤더 파일을 포함시키기 위해서 !include 명령을 사용한다. NSIS 설치 디렉터리의 Include 폴더 안에 있는 헤더 파일들은 경로를 따로 작성할 필요 없이 파일명만으로도 포함할 수 있다.
ex) !include 헤더파일명.nsh
NSIS 스크립트 구조
NSIS 스크립트는 1.인스톨러 속성, 2.페이지, 3.섹션, 4.함수를 포함한다. 컴파일 타임에 수행되는 컴파일러 명령어 또한 사용할 수 있다. Outfile 명령은 필수 명령어이며, NSIS가 어느 디렉터리에 인스톨러를 작성할 지 지정한다. 또한 최소 하나의 섹션은 반드시 작성해야 한다.
1.인스톨러 속성
인스톨러의 동작과 UI를 설정한다.
이러한 속성들을 사용하여 설치 도중 나타날 문자열이나 설치 유형 개수 등을 변경할 수 있다.
이러한 명령은 대부분 초기화만 가능하고, 런타임 도중 변경할 수 없다.
2.페이지
논-사일런트(포그라운드, 비-백그라운드) 인스톨러는 최종 사용자가 인스톨러의 구성을 설정하게 할 마법사 페이지를 내장하고 있다.
최종 사용자에게 보여줄 페이지를 Page명령을 통해 설정할 수 있다.
(고급 설정을 포함하는 PageEx 명령을 사용할 수도 있다.)
Page license
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
라이선스 계약서 페이지를 보여주는 license 페이지
설치 구성요소를 선택하는 components 페이지
설치 디렉터리를 선택하는 directory 페이지
마지막으로 선택된 구성요소를 설치하는 instfiles 페이지
언인스톨러의 경우 설치 제거를 확인하는 confirmation 페이지
설치를 제거하는 instfiles 페이지
3.섹션
인스톨러는 일반적으로 최종 사용자가 선택하여 설치할 수 있는 몇가지 옵션을 가진다.
ex) NSIS 배포 인스톨러에서는 추가 도구, 플러그-인, 예제 및 기타 리소스를 선택적으로 설치할 수 있다.
선택한 위 각 옵션들은 몇 줄의 코드들로 구성된다.
사용자가 원하는 Components(구성요소)를 설치하기 위해 선택하면 installer는 구성요소를 구성하는 코드를 수행한다.
스크립트에서 그 코드는 섹션 안에 정의되고 각 섹션은 구성요소 페이지에서 하나의 구성요소에 해당한다. 이때, 섹션 이름은 구성요소 이름으로 표시된다.
단 하나의 섹션으로도 installer를 빌드할 수 잇지만 만약 구성요소 페이지를 사용하고 싶거나 사용자에게 설치 옵션을 부여하려면 둘 이상의 섹션을 구현해야 한다.
마찬가지로 uninstaller 또한 여러 섹션을 가질 수 있고, 이때 섹션 이름은 앞에 un. 이 붙는다.
Section "Installer Section"
SectionEnd
Section "un.Uninstaller Section"
SectionEnd
섹션 안에서 사용되는 명령어들은 최종 사용자의 컴퓨터에서 런타임 때 실행되기 때문에 인스톨러 속성 명령어들과는 다르다.
파일을 압축 해제하고, 레지스트리 또는 INI 파일, 일반 파일 읽기/쓰기, 디렉토리 생성, 바로가기 생성 등 같은 작업을 한다.
ex) SetOutPath : installer에게 타겟 시스템의 어느 디렉터리에 압축 해제 할지 알려준다. File 명령어는 어떠한 파일을 압축해제 할 지 정한다.
OutFile "file_name.exe"
Section "My Program" # 섹션을 하나 생성하며 이름을 인자로 주었습니다.
SetOutPath $INSTDIR # $INSTDIR 위치를 파일이 설치될 디렉터리로 지정합니다.
File "My Program.exe" # 압축 해제되어 설치 될 파일의 현재(컴파일 타임) 위치를 지정합니다.
File "Readme.txt"
SectionEnd
4.함수
함수는 섹션과 같이 스크립트 코드를 포함할 수 있다. 섹션과 함수의 차이는 호출되어지는 방식이다.
함수는 두가지 종류가 있는데, 1.사용자 함수 2.콜백 함수이다.
1. 사용자 함수는 섹션이나 Call 명령어를 사용하는 함수 안에서 개발자에 의해 호출된다. 사용자 함수는 개발자가 호출하지 않는다면 실행되지 않는다. 함수 안의 코드가 실행된 후 인스톨러는 함수 안에서 설치를 중단하지 않는 한, Call 명령어 다음에 오는 명령어를 계속해서 수행한다. 사용자 함수는 인스톨러 안에서 여러 위치에서 수행될 명령어들을 작성할 때 유용하다. 함수 안에 코드를 넣으면 코드의 반복을 줄이며 유지 보수 효율을 높여준다.
2. 콜백 함수는 인스톨러가 시작될 때와 같이 특정 이벤트가 발생했을 때 인스톨러에 의해 호출된다. 콜백 함수는 선택적으로 구현하면 된다.
예를 들어 인스톨러가 시작될 때 최종 사용자에게 환영 메시지를 띄우고 싶다면 .onInit 콜백 함수를 구현하면된다.
NSIS 컴파일러는 이 함수의 이름을 판단하여 콜백 함수로써 인식하게 되며, 인스톨러가 시작될 때 호출된다.
'NSIS' 카테고리의 다른 글
NSIS 2GB 용량 해결 (7z을 이용하여 해결!) (0) | 2022.04.26 |
---|---|
NSIS 64bit 32bit인지 확인 (레지스트리 값 확인 활용) (0) | 2022.04.26 |
NSIS 파일 존재 확인 / 레지스트리 값 존재 확인 (0) | 2022.04.26 |
NSIS 쉬운 문법 설명 (0) | 2022.04.26 |
NSIS 설치 및 HM NIS Edit 스크립트 마법사 사용하기 (0) | 2022.04.26 |