Sections - NSIS manual

프로그래밍/NSIS | 2007/01/11 17:22 | 게으른 엔지니어
지금까지 이용했던 예제를 보면 전부 Section 이라는 항목이 있었을 것이다. function이나 page 처럼 이것도 마찬가지로 SectionEnd로 끝이 나는데, NSIS로 스크립트를 만들게 되면 무조건 한 개 이상의 section이 있어야 한다. 각 section은 명령어를 하나도 포함하지 않아도 되며, 스크립트에 있는 순서데로 실제로 실행이 된다. 그리고 ComponentText가 셋팅되어 있으면, 사용자가 각각의 section을 보여줄 것인지의 여부를 결정할 수 있다. 그리고 section의 이름이 "Uninstall" 이나 접두어로 "un." 이 있으면 언인스톨러의 section임을 기억해야 한다.

Section Commands



이 명령어는 Section 안에서만 기능을 하며, Section 밖에서는 아무런 기능을 하지 못한다. 이 명령어는 인스톨러에게 현재 section은 추가로 "size_bk" 만큼의 kbytes 의 디스크 여유분이 더 필요함을 알리는 명령어 이다.



새로운 section을 시작하는 명령어이다. section 이름을 주지 않거나, '-'로 시작하는 경우에는 숨겨진 section으로 사용자가 사용 못하도록 할 수가 없다. section 이름이 'Uninstall' 이거나 'un.' 으로 시작하는 이름이면 언인스톨러 section이다. section_index_output 이 지정되어 있으면, 파라메터가 section 인덱스와 함께 !defined로 정의된다. 만약 section 이름이 '!'로 시작되면 section 이름은 볼드체로 보여 진다. '/o' 스위치가 지정되면 section은 기본적으로 실행되지 않는다.


사용자 삽입 이미지
다른 옵션이나 스위치는 신경쓰지 말고 section_index_output 을 보자. 위 코드를 실행시키면 옆과 화면 결과를 보여 준다. Section은 기본적으로 위에서 부터 아래로 순서되로 실행된다. 그리고 순서는 0부터 값을 가진다. sec1_id이 0을 가지며, sec2_id는 2를 가지게 된다. 또한 .onInit 함수안에서 보는 것처럼 SectionGetText 명령어로 Section의 이름을 받아 올 수도 있다. 여기서 주의할 것은 이런 Section Index를 이용할려면 이용할려는 Section이 전부 이 section index를 사용하는 명령어보다 먼저 나와야 한다. 만약 위 코드에서 Function .onInit 이 Section test1 sec1_id 보다 먼저 나오면 에러가 뜬다. 따라서 꼭 순서를 잘 지켜서 사용해야 한다.




Section의 끝을 알리는 명령어 이다. 항상 Section과 짝을 지어 다녀야 함.



InstType 명령어로 인스톨 타입을 줄때 어떤 인스톨 타입에 포함될 것인지 결정하는 명령어이다. InstType은 첫번째부터 1, 2 순서로 인덱싱된다.



SectionGroup 으로 시작되면 반듯이 마지막은 SectionGroupEnd로 끝내야 한다.


Uninstall Section
언인스톨러를 만들려면 'Uninstall' 이라는 이름을 가지는 section을 만들어야 한다. 이 section에서는 인스톨러에 의해서 복사된 파일들이나 레지스트리등을 깨끗하게 지우는 역할을 하게 된다.



위 코드를 보면 2번째줄에 자기자신을 지우는 명령어가 있다. 이것이 가능한 이유는 NSIS로 만들어진 언인스톨러는 자기 자신을 시스템의 temporary 디렉토리에 복사한 후에 실제로 실행을 하므로 지우는게 가능하다.

또 한 주의 깊게 볼 것은 $INSTDIR이 꼭 프로그램이 인스톨 된 경로를 가지고 있는게 아니고, 실제로 실행될때는 언인스톨러가 있는 디렉토리를 저장하고 있다는 점을 명시해야 한다. 즉 언인스톨러를 프로그램이 인스톨된 곳과 다른 곳에 인스톨하게 되면 $INSTDIR은 프로그램이 인스톨 된 곳을 저장하지 않으므로 인스톨러에서 적당한 위치(레지스트리등)에 표시해서 언인스톨러에게 위치를 알려 줘야 한다. 일반적인 경우 언인스톨러는 프로그램 폴더에 같이 인스톨 되므로 크게 신경쓸 필요는 없다.


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG

트랙백을 보내세요

트랙백 주소 :: http://www.cipher.pe.kr/tt/cipher/trackback/109

댓글을 달아 주세요

[로그인][오픈아이디란?]
비밀글 (Serect)
댓글 달기 (Submit)