Wer Software entwickelt, kennt das: Das Programm ist fertig – und nun? Eine einfacher Installer muß her, schließlich soll die neue Anwendung leicht und schnell ausgerollt werden. Hier stellt sich nun die zweite Frage  – welches Tool wählen? Eine ganze Reihe von Softwareherstellern und auch Open Source Entwicklern bieten verschiedenste Tools und auch ganze Umgebungen an. Eine gute Wahl ist der NSIS-Installer wegen der Vielzahl an Möglichkeiten, die er bietet. Weiterhin gibt es für NSIS verschiedenste Erweiterungen, um das Setup ansprechend und individuell zu gestalten. Kurzbeschreibung: NSIS oder auch Nullsoft Scriptable Install System ist ein Programm zur Erstellung von Installern. Dieser kann unter Linux und Windows angewendet werden. Das Programm wurde von der Firma Nullsoft entwickelt. NSIS wurde für die Generierung des Installers für Winamp (Medienplayer) u. a. entwickelt. Heute ist NSIS eine freie Software und steht unter der zlib/libpng-Lizenz. Der Download wird über SourceForge angeboten. Hier wurde der NSIS auch im Januar 2006 als Projekt des Monats präsentiert. Das NSIS an sich verfügt lediglich über einen Kommandozeilen-Kompilierer. Weiterhin gibt es zum Kompiler eine einfach grafische Benutzeroberfläche, die grafische Benutzeroberfläche erleichtert  das Einstellen des Kompilers. Allerdings stehen auch freie IDEs für NSIS zur Verfügung. Die zu Zeit leistungsfähigste ist dabei Eclipse-NSIS. Hier ist ein plattformübergreifendes Plug-in für die freie Eclipse-IDE vorhanden. Der Installer basiert auf einem Skript, dabei ist  jede Zeile eine Anweisung. Die Skript-Datei wird durch den Kommandozeilen-Kompilierer „makensis.exe“ zu einer ausführbaren Datei kompiliert. Während des Kompilierens werden sämtliche Dateien komprimiert, die  für das Installationsprogramm notwendig sind. Einige Vorteile von NSIS:
  • Freie Software
  • Verschiedene Komprimierungsmöglichkeiten
  • Verschiedenste Umgebungen, Tools mit denen das Skript erstellt werden kann
  • Einfacher Aufbau der Skriptdatei, die zum Erstellen des Installers notwendig ist
  • Individuelles Anpassen durch Anpassen der Skripte und Seiten des Installers
  • Erstellen von Registry-Einträgen
  • Erzeugen eines Uninstallers
Ein kleines Beispiel, wie so ein Skript für den Kompiler aussehen kann (aus einem unserer Anwendungsfälle – leicht abgewandelt):
; MUI 1.67 kompatibel------
!include "XPUI.nsh"
!include "Registry.nsh"
;------------------------------------------------------------------------
; globale Einstellungen
!define PRODUCT_NAME "Hallo Welt"
!define PRODUCT_PUBLISHER "JK DV-Systeme GmbH"
!define PRODUCT_WEB_SITE "www.jkdv.de"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_STARTMENU_REGVAL "Hallo Welt:StartMenuDir"
!define PRODUCT_LICENSE "\Lizenz.txt"
!define XPUI_SKIN "HalloWeltSkin"                            ; Skin define XPUI / Windows XP
!define MUI_ABORTWARNING                                     ; ab hier MUI-Settings
!define MUI_ICON "..\HalloWelt\icon.ico"
!define MUI_UNICON "..\HalloWelt\iconoff.ico"

; Willkommensseite
!insertmacro MUI_PAGE_WELCOME

; Lizenzseite
!define MUI_LICENSEPAGE_RADIOBUTTONS
!insertmacro MUI_PAGE_LICENSE ${PRODUCT_LICENSE}

; Installationsverzeichnis
!insertmacro MUI_PAGE_DIRECTORY

; Startmenueeinträge erstellen
var ICONS_GROUP
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${PRODUCT_NAME}"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES

; Uninstaller
!insertmacro MUI_UNPAGE_INSTFILES

; MUI-Ende ------

Name "${PRODUCT_NAME} ${PRODUCT_NAME_ERWEITERUNG}"
OutFile "..\PDFMixer_Setups\Setup-${PRODUCT_NAME}-${PRODUCT_TYP}${PRODUCT_VERSION}${PRODUCT_SPRACHE}.exe"
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
AutoCloseWindow false
XPStyle on

Section "${PRODUCT_NAME}" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer ; soll überschrieben werden ? ifnewer (wenn neuer)
  File "..\HalloWelt\Hallo Welt.exe"

  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\${PRODUCT_NAME}.exe"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "DisplayName" "${PRODUCT_NAME}"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "DisplayIcon" "$INSTDIR\${PRODUCT_NAME}.exe"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "Publisher" "${PRODUCT_PUBLISHER}"
  WriteRegStr HKLM "SOFTWARE\${PRODUCT_NAME}" "Path" "$INSTDIR"
; Shortcuts
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
  CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
  CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
  !insertmacro MUI_STARTMENU_WRITE_END
SectionEnd

Section -AdditionalIcons
  !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\Uninstall.lnk" "$INSTDIR\uninst.exe"
  !insertmacro MUI_STARTMENU_WRITE_END
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\${PRODUCT_NAME}.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_NAME}.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

Section Uninstall
  !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\Hallo Welt.exe"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  DeleteRegKey HKLM "SOFTWARE\${PRODUCT_NAME}"
  SetAutoClose true
SectionEnd

Function un.onUninstSuccess
    MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) wurde erfolgreich deinstalliert."
FunctionEnd
Zum Schluss: Kleine Anmerkungen und Links Fazit: Wer eigene Software entwickelt, erstellt mit NSIS maßgeschneiderte Installer, die an die eigenen und oder die Bedürfnisse des Kunden angepasst sind. Und, wenn es Probleme gibt, wir helfen auch hier – nehmen Sie gern Kontakt auf…