Section Commands
[code type=nsis]AddSize size_kb[/code]
이 명령어는 Section 안에서만 기능을 하며, Section 밖에서는 아무런 기능을 하지 못한다. 이 명령어는 인스톨러에게 현재 section은 추가로 "size_bk" 만큼의 kbytes 의 디스크 여유분이 더 필요함을 알리는 명령어 이다.
[code type=nsis]Section [/o] [([!]|[-])section_name] [section_index_output][/code]
새로운 section을 시작하는 명령어이다. section 이름을 주지 않거나, '-'로 시작하는 경우에는 숨겨진 section으로 사용자가 사용 못하도록 할 수가 없다. section 이름이 'Uninstall' 이거나 'un.' 으로 시작하는 이름이면 언인스톨러 section이다. section_index_output 이 지정되어 있으면, 파라메터가 section 인덱스와 함께 !defined로 정의된다. 만약 section 이름이 '!'로 시작되면 section 이름은 볼드체로 보여 진다. '/o' 스위치가 지정되면 section은 기본적으로 실행되지 않는다.
[code type=nsis]# set the name of the installer
outfile "section.exe"
Section test1 sec1_id
SectionEnd
Section
SectionEnd
Section test2 sec2_id
SectionEnd
Function .onInit
SectionGetText ${sec1_id} $0
SectionGetText ${sec2_id} $1
MessageBox MB_OK "name of ${sec1_id}:$\n$0$\nname of ${sec2_id}:$\n$1"
FunctionEnd[/code]

[code type=nsis]SectionEnd[/code]
Section의 끝을 알리는 명령어 이다. 항상 Section과 짝을 지어 다녀야 함.
[code type=nsis]SectionIn insttype_index [insttype_index] [R0][/code]
InstType 명령어로 인스톨 타입을 줄때 어떤 인스톨 타입에 포함될 것인지 결정하는 명령어이다. InstType은 첫번째부터 1, 2 순서로 인덱싱된다.
[code type=nsis]SectionGroup [/e] section_group_name [index_output]
여러 개의 section을 묶어서 그룹으로 만들 수 있다. SectionGroup으로 그룹을 만들 경우 반드시 SectionGroupEnd로 묶어야 한다. 그리고 내부에 반드시 한 개 이상의 section이 포함되어 있어야 한다. section과 마찬가지로 이름이 '!'로 시작되면 볼드체로 보여 주며, 'un.'으로 이름을 시작하면 언인스톨러에 포함된다.
[code type=nsis]SectionGroupEnd[/code]
SectionGroup 으로 시작되면 반듯이 마지막은 SectionGroupEnd로 끝내야 한다.
Uninstall Section
언인스톨러를 만들려면 'Uninstall' 이라는 이름을 가지는 section을 만들어야 한다. 이 section에서는 인스톨러에 의해서 복사된 파일들이나 레지스트리등을 깨끗하게 지우는 역할을 하게 된다.
[code type=nsis]Section "Uninstall"
Delete $INSTDIR\Uninst.exe
Delete $INSTDIR\myApp.exe
RMDir $INSTDIR
DeleteRegKey HKLM SOFTWARE\myApp
SectionEnd[/code]
위 코드를 보면 2번째줄에 자기자신을 지우는 명령어가 있다. 이것이 가능한 이유는 NSIS로 만들어진 언인스톨러는 자기 자신을 시스템의 temporary 디렉토리에 복사한 후에 실제로 실행을 하므로 지우는게 가능하다.
또 한 주의 깊게 볼 것은 $INSTDIR이 꼭 프로그램이 인스톨 된 경로를 가지고 있는게 아니고, 실제로 실행될때는 언인스톨러가 있는 디렉토리를 저장하고 있다는 점을 명시해야 한다. 즉 언인스톨러를 프로그램이 인스톨된 곳과 다른 곳에 인스톨하게 되면 $INSTDIR은 프로그램이 인스톨 된 곳을 저장하지 않으므로 인스톨러에서 적당한 위치(레지스트리등)에 표시해서 언인스톨러에게 위치를 알려 줘야 한다. 일반적인 경우 언인스톨러는 프로그램 폴더에 같이 인스톨 되므로 크게 신경쓸 필요는 없다.



글
댓글을 달아 주세요
댓글 RSS 주소 : http://www.cipher.pe.kr/tt/cipher/rss/comment/109댓글 ATOM 주소 : http://www.cipher.pe.kr/tt/cipher/atom/comment/109