실행 순서

NSIS 스크립트는 기본적으로 위에서 아래로 순서대로 실행이 된다지만 약간 헷갈리기도 합니다. 컴파일 타임 명령과 특히 이곳저곳에 섞이는 인스톨러 속성 명령때문이 아닌가 합니다.컴파일 타임 명령

컴파일되면서 그때 그때 실행되면서 실행 인스톨러에는 영향을 미치지 않습니다. 예로 (현재 디렉토리 c:\test\test 이고 압축할 파일은 C:\test\test.exe 일때)

이렇게 하면 컴파일러가 컴파일하면서 디렉토리를 한번 상위 디렉으로 이동해서 test.exe 를 압축합니다.

과 같은 결과입니다. 사실상 거의 쓸일이 없습니다만… 컴파일 타임 명령은 주로 !define 명령이 사용됩니다.
컴파일 타임 명령은 인스톨 속성 명령과 달리 실행 순서가 되야 실행됩니다.

인스톨러 속성 명령

인스톨러를 초기화합니다. 컴파일러는 인스톨 속성 명령을 스크립트 전체를 분석해서 한번에 모아서 적용시킵니다. 즉, 섹션등에 포함되거나 하지만 않으면 스크립트 위치에 상관이 없습니다. 즉, 스크립트 맨위에 Name 명령있거나 맨 뒤에 Name 명령이 있거나 전혀 상관없습니다.

콜백 함수

Function .onInit
인스톨러가 실행되어 초기화가 막 끝난 시점. 보통 인스톨러가 시작되기 전 조건 검사 등을 여기서 검사합니다. (특정 프로그램을 종료시킨다거나. 등등..)
Function .onGUIInit
인스톨러 화면을 메모리에 불러들이고 보여주기 직전
섹션 또는 사용자 함수
섹션이 순서대로 진행되며 섹션에서 함수들을 호출합니다.
Function .onInstSuccess
설치가 끝나고 윈도가 닫히기 직전에 호출

대개 위와 같은 순서를 거칩니다. 중간 중간에 이벤트에 따라 아래와 같은 콜백 함수가 호출되기도 합니다.Function .onInstFailed

인스톨 과정 중 언제든지 실패하면 호출됨
Function .GUIEnd
설치화면이 닫힌 직후에 호출됩니다. 설치 성공여부등에 전혀 상관 없습니다. 즉, 컴포넌트 페이지에서 컴포넌트 선택하다가 그냥 취소 눌러서 종료시켜도 화면이 사라질때 호출됩니다.
Function .onMouseOverSection
컴포넌트 선택화면에서 마우스 커서가 섹션위에 위치할 때 호출됩니다.
Function .onRebootFailed
인스톨 중에 Reboot 명령으로 재부팅을 시도했지만 실패하면 호출됩니다.
Function .onSelChange
컴포넌트 페이지에서 선택한 섹션이 변경되면 호출됩니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다