Table of Contents

NSIS Installer

http://nsis.sourceforge.net/Main_Page

An old installer. Use Inno Setup if possible:

http://jrsoftware.org/isinfo.php
http://sourceforge.net/projects/istool/

Command Line parameters

Read command line parameters

${GetOptions} "[Parameters]" "[Option]" $var
"[Parameters]"     ; command line parameters
                   ;
"[Option]"         ; option name
                   ;
$var               ; Result: option string

Example

Section
	${GetOptions} "-INSTDIR=C:\Program Files\Common Files -SILENT=yes" "-INSTDIR="  $R0
	;$R0=C:\Program Files\Common Files
SectionEnd

Multiple Files via include

merge multiple files via include

This command will include 'file' as if it was part of the original script. Note that if a file is included in another directory, the current directory is still where the script was compiled from (not where the included file resides). If the compiler can't find the file it will look for it in every include directory. See !addincludedir for more information. If the /nonfatal switch is used and no files are found, a warning will be issued instead of an error.

!include WinMessages.nsh
!include Library.nsh
!include C:\MyConfig.nsi
!include ..\MyConfig.nsh
!include /NONFATAL file_that_may_exist_or_not.nsh

Use !addincludedir to point to a folder where some NSIS Scripts may be found for inclusion.

Variables

The $ is prepended to the variables: $varName
Variables are defined once.
Then they are overridden via StrCopy

Example

Var example

Function testVar
  Var /GLOBAL example2

  StrCpy $example "example value"
  StrCpy $example2 "another example value"
FunctionEnd

Sections

The script is devided in sections. Each section matches a logical unit - a logical unit. E.g. a decision, a set of commands etc.

# Installer sections
Section /o Sales SEC0000
    SetOutPath $INSTDIR
    SetOverwrite on
    File "componentDummyFiles\sales.txt"
SectionEnd

Section Tariff SEC0001
    SetOutPath $INSTDIR
    SetOverwrite on
    File "componentDummyFiles\tariff.txt"
SectionEnd

Section  /o Customer SEC0002
    SetOutPath $INSTDIR
    SetOverwrite on
    File "componentDummyFiles\customer.txt"
SectionEnd

Function .onSelChange
  MessageBox MB_OK "onSelChange"
FunctionEnd

Rendered as checkboxes:

you may implement callbacks which are triggered when the seleciton is changed.

Function .onSelChange
  MessageBox MB_OK "onSelChange"
FunctionEnd

you may change the state of checkboxes programmatically:

; executed on initialization of wizard
Function .onInit
  
  IfSilent 0 silentCodeEnd ; executed in silent mode only 
    !insertmacro SetSectionFlag ${SEC0000} ${SF_SELECTED}
    !insertmacro SetSectionFlag ${SEC0001} ${SF_SELECTED}
    !insertmacro SetSectionFlag ${SEC0002} ${SF_SELECTED}
  silentCodeEnd: ; silent block ENDS here
  
FunctionEnd