[NSIS] 함수 정의하기
Writer: http://ospace.tistory.com/(ospace114@empal.com) 2008.08.28
개요
NSIS에서는 함수 호출가능한 경우가 두가지가 있다. 설치와 제거이다.
즉, 설치시 호출하는 함수와 제거시 호출하는 함수명이 틀리다.
제거시 반드시 함수 명 앞에 "un."이라는게 들어가야 한다.
이를 하나의 함수로 두 곳에서 사용할 수 있는 방법을 살펴보겠다.
일반적 사용
예들들어 FindPorcess라는 함수가 다음과 같이 정의 되어 있다면;
Function FindProcess
;주저리 주저리
FunctionEnd
NSIS이벤트 중에 .onInit에서 호출하면 이상없이 호출되지만,
Function .onInit
Call FindProcess
;...
FunctionEnd
un.onInit에서 호출하면 에러가 발생한다.
Function un.onInit
Call FindProcess
;...
FunctionEnd
발생 에러
Call must be used with function names starting with "un." in the uninstall section.
Usage: Call function_name : [:label_name]
이라고 출력이 된다.
그럼 거두 절미하고 바로 쉽게 설치와 제거에서 사용할 수 있는 함수 사용을 보자.
새로운 함수 정의
일단, 함수 정의 전에 매크로를 정의해서 사용하겠다.
!ifndef UN
!define UN ""
!endif
!macro FUNC_FINDPROCESS UN
;주저리 주저리
!macroend
감을 잡으신 분도 있을 것이다. 즉 매크로를 이용해서 두가지 함수를 정의한다.
뒤에 UN은 현재 설치 인지 제거 인지 식별하기 위한 값이다.
함수 선언은 다음과 같이 하면 된다.
Function FindProcess
!insertmacro FUNC_FINDPROCESS ""
FunctionEnd
Function un.FindProcess
!insertmacro FUNC_FINDPROCESS "un."
FunctionEnd
그러면 제거이든 설치이든 아무 곳이나 함수를 호출해서 사용하면 된다. 물론 제거시에는 앞에 "un."를 붙여줘야한다.
결론
그냥 함수를 정의해서 사용하는 방법에 비해서 복잡한 선언이 필요하다. 각 함수를 매크로로 정의하고 해당 매크로를 다시 두 종류의 함수로 정의하게 된다. 상당히 번거로운 작업이 된다.
그러나, 설치와 제거를 따로 구현하는 중복 코드가 없어지면, 한곳에서 관리되기에 유지보수에도 편한 장점도 있다. 그러나, 사용 목적이나 장소에 따라서 선택적으로 적용하면 될 것이다.
참조: NSIS의 스크립트 헤더 파일
'4.개발 및 운영 환경' 카테고리의 다른 글
[NSIS] LogicLib이용한 if, switch, while, for, loopuntil문 사용하기 (0) | 2008.08.29 |
---|---|
[NSIS] 괜찮은 NSIS 플러그인 모음 Joel plugin - MSIBanner(progress bar), etc (0) | 2008.08.28 |
디버깅툴 dbgview (0) | 2008.08.13 |
프로그래밍 언어 사용 비율 (0) | 2007.12.12 |
함수 호출 시각화 하기 (0) | 2007.10.31 |