Previous | Contents | Next

## 4.6 Sections

Each NSIS installer contains one or more sections. Each of these sections are created, modified, and ended with the following commands.

- Each section contains zero or more instructions.
- Sections are executed in order by the resulting installer, and if ComponentText is set, the user will have the option of disabling/enabling each visible section.
- If a section's name is 'Uninstall' or is prefixed with 'un.', it's an uninstaller section.

### 4.6.1 Section Commands

#### 4.6.1.1 AddSize

    size_kb

Tells the installer that the current section needs an additional "size_kb" kilobytes of disk space. Only valid within a section (will have no effect outside of a section or in a function).

    Section

    AddSize 500

    SectionEnd

#### 4.6.1.2 Section

    [/o] [([!]|[-])section_name] [section_index_output]

Begins and opens a new section. If section_name is empty, omitted, or begins with a -, then it is a hidden section and the user will not have the option of disabling it. If the section name is 'Uninstall' or is prefixed with 'un.', then it is a an uninstaller section. If section_index_output is specified, the parameter will be !defined with the section index (that can be used for SectionSetText etc). If the section name begins with a !, the section will be displayed as bold. If the /o switch is specified, the section will be unselected by default.

    Section "-hidden section"

    SectionEnd

    Section # hidden section

    SectionEnd

    Section "!bold section"

    SectionEnd

    Section /o "optional"

    SectionEnd

    Section "install something" SEC_IDX

    SectionEnd

To access the section index, curly brackets must be used and the code must be located below the section in the script.

    Section test1 sec1_id

    SectionEnd

    Section test2 sec2_id

    SectionEnd

    Function .onInit

      SectionGetText ${sec2_id} $0

      MessageBox MB_OK "name of ${sec2_id}:$\n$0" # will correctly display 'name of 1: test2'

    FunctionEnd

    Function .onInit

      SectionGetText ${sec2_id} $0

      MessageBox MB_OK "name of ${sec2_id}:$\n$0" # will incorrectly display 'name of ${sec2_id}: test1'

        # plus a warning stating:

        #   unknown variable/constant "{sec2_id}" detected, ignoring

    FunctionEnd

    Section test1 sec1_id

    SectionEnd

    Section test2 sec2_id

    SectionEnd

#### 4.6.1.3 SectionEnd

This command closes the current open section.

#### 4.6.1.4 SectionIn

    insttype_index [insttype_index] [RO]

This command specifies which install types (see InstType) the current section defaults to the enabled state in. Multiple SectionIn commands can be specified (they are combined). If you specify RO as a parameter, then the section will be read-only, meaning the user won't be able to change its state. The first install type defined using InstType is indexed 1, the next 2 and so on.

    InstType "full"

    InstType "minimal"

    Section "a section"

    SectionIn 1 2

    SectionEnd

    Section "another section"

    SectionIn 1

    SectionEnd

#### 4.6.1.5 SectionGroup

    [/e] section_group_name [index_output]

This command inserts a section group. The section group must be closed with SectionGroupEnd, and should contain 1 or more sections. If the section group name begins with a !, its name will be displayed with a bold font. If /e is present, the section group will be expanded by default. If index_output is specified, the parameter will be !defined with the section index (that can be used for SectionSetText etc). If the name is prefixed with 'un.' the section group is an uninstaller section group.

    SectionGroup "some stuff"

    Section "a section"

    SectionEnd

    Section "another section"

    SectionEnd

    SectionGroupEnd

#### 4.6.1.6 SectionGroupEnd

Closes a section group opened with SectionGroup.

### 4.6.2 Uninstall Section

A special Section named 'Uninstall' must be created in order to generate an uninstaller. This section should remove all files, registry keys etc etc that were installed by the installer, from the system. Here is an example of a simple uninstall section:

    Section "Uninstall"

      Delete $INSTDIR\Uninst.exe ; delete self (see explanation below why this works)

      Delete $INSTDIR\myApp.exe

      RMDir $INSTDIR

      DeleteRegKey HKLM SOFTWARE\myApp

    SectionEnd

The first Delete instruction works (deleting the uninstaller), because the uninstaller is transparently copied to the system temporary directory for the uninstall.

Note that in uninstaller code, $INSTDIR contains the directory where the uninstaller lies. It does not necessarily contain the same value it contained in the installer.

Previous | Contents | Next