지금까지 이용했던 예제를 보면 전부 Section 이라는 항목이 있었을 것이다. function이나 page 처럼 이것도 마찬가지로 SectionEnd로 끝이 나는데, NSIS로 스크립트를 만들게 되면 무조건 한 개 이상의 section이 있어야 한다. 각 section은 명령어를 하나도 포함하지 않아도 되며, 스크립트에 있는 순서데로 실제로 실행이 된다. 그리고 ComponentText가 셋팅되어 있으면, 사용자가 각각의 section을 보여줄 것인지의 여부를 결정할 수 있다. 그리고 section의 이름이 "Uninstall" 이나 접두어로 "un." 이 있으면 언인스톨러의 section임을 기억해야 한다.
Section Commands
-
AddSize size_kb
이 명령어는 Section 안에서만 기능을 하며, Section 밖에서는 아무런 기능을 하지 못한다. 이 명령어는 인스톨러에게 현재 section은 추가로 "size_bk" 만큼의 kbytes 의 디스크 여유분이 더 필요함을 알리는 명령어 이다.
-
Section [/o] [([!]|[-])section_name] [section_index_output]
새로운 section을 시작하는 명령어이다. section 이름을 주지 않거나, '-'로 시작하는 경우에는 숨겨진 section으로 사용자가 사용 못하도록 할 수가 없다. section 이름이 'Uninstall' 이거나 'un.' 으로 시작하는 이름이면 언인스톨러 section이다. section_index_output 이 지정되어 있으면, 파라메터가 section 인덱스와 함께 !defined로 정의된다. 만약 section 이름이 '!'로 시작되면 section 이름은 볼드체로 보여 진다. '/o' 스위치가 지정되면 section은 기본적으로 실행되지 않는다.
-
# 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

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