Getting Started with the NSIS Install System

Download and install the NSIS (Nullsoft Scriptable Install System) package

From here.



Run the NSIS installation package using their setup wizard:

Write an NSIS (*.nsi) script file

An .nsi file is just a text file with script code.

Commands are in the format: command [parameters]
Comments are included using ‘#’ or ‘;’ or C-style comments /* …. */

A simple example nsi script is shown here:

; Example.nsi
;
; Very simple example: all optional settings left as default. 
; Installer asks user where to install, and drops copy of "Program.exe" there.

; Name the installer
Name "Example"

; Set the installer output file name
OutFile "ExampleInstaller.exe"

; Set the default installation directory
InstallDir $PROGRAMFILES\Arrayjet\Sprint

; Set the text to prompt user to enter a directory
DirText "This will install My Cool Program on your computer. Choose a directory"

; Specify all files needed for installation
Section "MainSection" SEC01

   ; Set output path to the installation directory, 
   ; where INSTDIR = C:\Program Files\Arrayjet\Sprint
   SetOutPath $INSTDIR
   
   ;Create the installation directory
   CreateDirectory $INSTDIR

   ; Put file there
   File Program.exe
   File Text.txt

SectionEnd

Save it as an .nsi file.

Compile the .nsi file

Open the .nsi file in the MakeNSISW tool and will automatically compile, highlighting any errors if there are any:

It will also create the installation executable for you:



Run the installer

Running this executable will create the directory C:\Program Files\Arrayjet\Sprint and insert the “Text.txt” and “Program.exe” files for you.

A more complicated example

The following nsi script, when compiled will generate an installation package that will create/install:

… ‘Welcome’/’Installation’/’Finish’ installation pages
… an complete un-install package
… software version information
… multiple files installed (exe, chm, pdf) from input folder
… a set of dlls for the the system32 folder
… the desired font
… new directories at chosen locations
… program shortcuts at chosen desktop/start menu locations
… required strings written to the registry

These functionlities are all self-documented inside the script:

# Auto-generated by EclipseNSIS Script Wizard
# 14-Sep-2011 14:19:38

Name "Command Centre™ for Sprint"

# General Symbol Definitions
!define REGKEY "SOFTWARE\$(^Name)"
!define VERSION 1.2.0
!define COMPANY Arrayjet
!define URL http://www.arrayjet.co.uk

# MUI Symbol Definitions
!define MUI_ICON "resources\Common files\Small Instrument Software 1.0.ico"
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_FINISHPAGE_RUN "$INSTDIR\Command Centre™ for Sprint v1.2.exe"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!define MUI_UNFINISHPAGE_NOAUTOCLOSE

# Included files
!include Sections.nsh
!include MUI.nsh

# Variables
Var StartMenuGroup

# Installer pages
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

# Installer languages
!insertmacro MUI_LANGUAGE English

# Installer attributes
OutFile "Command Centre™ for Sprint v1.2.exe"
InstallDir "$PROGRAMFILES\Arrayjet\Sprint Software"
CRCCheck on
XPStyle on
ShowInstDetails show
VIProductVersion 1.2.0.0
VIAddVersionKey ProductName "Sprint Software"
VIAddVersionKey ProductVersion "${VERSION}"
VIAddVersionKey CompanyName "${COMPANY}"
VIAddVersionKey CompanyWebsite "${URL}"
VIAddVersionKey FileVersion "${VERSION}"
VIAddVersionKey FileDescription ""
VIAddVersionKey LegalCopyright ""
InstallDirRegKey HKLM "${REGKEY}" Path
ShowUninstDetails show

# Installer sections
Section -MainInstallFolder SEC0000
    SetOutPath $INSTDIR
    SetOverwrite on
    File "resources\Command Centre™ for Sprint v1.0 Help.chm"
    File "resources\Command Centre™ for Sprint v1.0 User Manual.pdf"
    File "resources\Command Centre™ for Sprint v1.2.exe"
    File "resources\Command Centre™ Release Notes v1.0.chm"
    File "resources\inst_param.aj"
    File "resources\Common files\runtime.aj"
    File "/oname=Sprint.ico" "resources\Common files\Small Instrument Software 1.0.ico" 
    WriteRegStr HKLM "${REGKEY}\Components" MainInstallFolder 1
SectionEnd

Section -windowsFiles SEC0001
    SetOutPath $SYSDIR
    SetOverwrite try
    File "resources\Common files\msvcr71.dll"
    File "resources\Common files\msvcr70.dll"
    File "resources\Common files\msvcp71.dll"
    File "resources\Common files\MSVCI70.dll"
    File "resources\Common files\MFC71.dll"
    File "resources\Common files\mfc70.dll"
    WriteRegStr HKLM "${REGKEY}\Components" windowsFiles 1
SectionEnd

Section -fonts SEC0002
    SetOutPath $FONTS
    SetOverwrite on
    File "resources\Common files\lte50331.ttf"
    WriteRegStr HKLM "${REGKEY}\Components" fonts 1
SectionEnd

Section -folders SEC0003
    SetOutPath $INSTDIR
    SetOverwrite on
    CreateDirectory "LogFiles"
    CreateDirectory "Output Files"
    WriteRegStr HKLM "${REGKEY}\Components" folders 1
SectionEnd

Section -shortcuts SEC0004
    SetShellVarContext all
    SetOutPath "$SMPROGRAMS\$StartMenuGroup"
    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Command Centre™ for Sprint.lnk" "$INSTDIR\Command Centre™ for Sprint v1.2.exe" "" "$INSTDIR\Sprint.ico"
    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Help.lnk" "$INSTDIR\Command Centre™ for Sprint v1.0 Help.chm"
    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\User Manual.lnk" "$INSTDIR\Command Centre™ for Sprint v1.0 User Manual.pdf"
    CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall.lnk" "$INSTDIR\Uninstall.exe"    
    SetOutPath $DESKTOP
    CreateShortcut "$DESKTOP\Command Centre™ for Sprint.lnk" "$INSTDIR\Command Centre™ for Sprint v1.2.exe" "" "$INSTDIR\Sprint.ico"
    WriteRegStr HKLM "${REGKEY}\Components" shortcuts 1
SectionEnd

Section -post SEC0005
    WriteRegStr HKLM "${REGKEY}" Path $INSTDIR
    SetOutPath $INSTDIR
    WriteUninstaller $INSTDIR\uninstall.exe
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}"
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe
    WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe
    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1
    WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1
SectionEnd

# Macro for selecting uninstaller sections
!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID
    Push $R0
    ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}"
    StrCmp $R0 1 0 next${UNSECTION_ID}
    !insertmacro SelectSection "${UNSECTION_ID}"
    GoTo done${UNSECTION_ID}
next${UNSECTION_ID}:
    !insertmacro UnselectSection "${UNSECTION_ID}"
done${UNSECTION_ID}:
    Pop $R0
!macroend

# Uninstaller sections


Section /o -un.folders UNSEC0004
    RmDir "$INSTDIR\LogFiles"
    RmDir "$INSTDIR\Output Files"
    RmDir  $SMPROGRAMS\$StartMenuGroup
    Delete /REBOOTOK $INSTDIR\*
    RmDir /REBOOTOK $INSTDIR
    Delete /REBOOTOK $INSTDIR\*
    RmDir /REBOOTOK $INSTDIR
    Delete $PROGRAMFILES\$INSTDIR\*
    RmDir $PROGRAMFILES\$INSTDIR
    RmDir $PROGRAMFILES\Arrayjet
    DeleteRegValue HKLM "${REGKEY}\Components" folders
SectionEnd

Section /o -un.fonts UNSEC0003
    Delete /REBOOTOK $FONTS\lte50331.ttf
    DeleteRegValue HKLM "${REGKEY}\Components" fonts
SectionEnd

Section /o -un.windowsFiles UNSEC0002
    Delete /REBOOTOK $SYSDIR\mfc70.dll
    Delete /REBOOTOK $SYSDIR\MFC71.dll
    Delete /REBOOTOK $SYSDIR\MSVCI70.dll
    Delete /REBOOTOK $SYSDIR\msvcp71.dll
    Delete /REBOOTOK $SYSDIR\msvcr70.dll
    Delete /REBOOTOK $SYSDIR\msvcr71.dll
    DeleteRegValue HKLM "${REGKEY}\Components" windowsFiles
SectionEnd

Section /o -un.MainInstallFolder UNSEC0001
    Delete $INSTDIR\runtime.aj
    Delete $INSTDIR\inst_param.aj
    Delete "$INSTDIR\Command Centre™ Release Notes v1.0.chm"
    Delete /REBOOTOK "$INSTDIR\Command Centre™ for Sprint v1.2.exe"
    Delete /REBOOTOK "$INSTDIR\Command Centre™ for Sprint v1.0 User Manual.pdf"
    Delete /REBOOTOK "$INSTDIR\Command Centre™ for Sprint v1.0 Help.chm"
    Delete /REBOOTOK "$INSTDIR\Sprint.ico"
    DeleteRegValue HKLM "${REGKEY}\Components" MainInstallFolder
SectionEnd

Section /o -un.shortcuts UNSEC0000
    SetShellVarContext all
    Delete "$SMPROGRAMS\$StartMenuGroup\Command Centre™ for Sprint.lnk"
    Delete "$SMPROGRAMS\$StartMenuGroup\Help.lnk"
    Delete "$SMPROGRAMS\$StartMenuGroup\User Manual.lnk"
    Delete "$SMPROGRAMS\$StartMenuGroup\Uninstall.lnk"   
    Delete "$SMPROGRAMS\$StartMenuGroup\*.*"
    RMDir  "$SMPROGRAMS\$StartMenuGroup"
    Delete "$DESKTOP\Command Centre™ for Sprint.lnk" 
    DeleteRegValue HKLM "${REGKEY}\Components" shortcuts
SectionEnd

Section -un.post UNSEC0005
    DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)"
    Delete /REBOOTOK $INSTDIR\uninstall.exe
    DeleteRegValue HKLM "${REGKEY}" Path
    DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components"
    DeleteRegKey /IfEmpty HKLM "${REGKEY}"
    RmDir /REBOOTOK $INSTDIR
SectionEnd

# Installer functions
Function .onInit
    InitPluginsDir
    StrCpy $StartMenuGroup "Arrayjet"
FunctionEnd

# Uninstaller functions
Function un.onInit
    ReadRegStr $INSTDIR HKLM "${REGKEY}" Path
    StrCpy $StartMenuGroup "Arrayjet"
    !insertmacro SELECT_UNSECTION shortcuts ${UNSEC0000}
    !insertmacro SELECT_UNSECTION MainInstallFolder ${UNSEC0001}
    !insertmacro SELECT_UNSECTION windowsFiles ${UNSEC0002}
    !insertmacro SELECT_UNSECTION fonts ${UNSEC0003}
    !insertmacro SELECT_UNSECTION folders ${UNSEC0004}
FunctionEnd