Home | Sitemap | Kontakt

Einleitung

Im 2. Teil des Tutorials erweiterten wir unseren Installer erstellt um einen Uninstaller und warfen einen Blick auf einige weitere Wizard-Seiten und die Auswahl der zu installierenden Teile. Das Ziel des dritten Teils ist es nun, dem Installer ein etwas aktuelleres Erscheinungsbild zu geben.

Ein modernerer Look

Um dem Installer ein etwas moderneres Aussehen zu geben gibt es das Modern User Interface. Um unseren Installer (basierend auf "secondinstaller") aufzuwerten benötigt es nicht viel:

!include "MUI.nsh"

Name "Fifth Installer"

OutFile "fifthinstaller.exe"
InstallDir $PROGRAMFILES\MyFifthInstaller

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

Section ""
  SetOutPath $INSTDIR
  File C:\Windows\system32\notepad.exe
  WriteUninstaller $INSTDIR\uninstall.exe
SectionEnd

Section "Uninstall"
  Delete $INSTDIR\uninstall.exe
  Delete $INSTDIR\notepad.exe
  RMDir $INSTDIR
SectionEnd

Drei Änderungen haben wir angebracht:

!include "MUI.nsh"

Fügt die Datei MUI.nsh ein als wäre sie Teil unseres Scripts. In der Datei MUI.nsh sind die benötigten Makros definiert.

!insertmacro ...

Als Ersatz für die Page bzw. UninstPage Kommandos werden die benötigten Seiten mit den Makros eingefügt.

!insertmacro MUI_LANGUAGE "English"

Mit diesem Makro werden die Englischen Texte eingefügt. Für deutsche Texte ist entsprechend "German" als Sprache anzugeben.

Fourth Installer reloaded

Die im Teil 2 hizugefügten Dialoge möchten wir nun natürlich auch mit dem Modern User Interface umsetzen.

And here we go:

!include "MUI.nsh"

Name "Sixth Installer"
!define INSTALLATIONNAME "MySixthInstaller"
OutFile "sixthinstaller.exe"
InstallDir $PROGRAMFILES\${INSTALLATIONNAME}

Page custom getUsername
!insertmacro MUI_PAGE_LICENSE "license.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

!insertmacro MUI_LANGUAGE "English"

LangString PAGE_NAMECOMPANY_TITLE ${LANG_ENGLISH} "Custom Page Sample"
LangString PAGE_NAMECOMPANY_SUBTITLE ${LANG_ENGLISH} "Please enter Name and Company."

Var UserName
Var Company

Function ".onInit"
  InitPluginsDir
  File /oname=$PLUGINSDIR\namecompany.ini "namecompany.ini"
FunctionEnd

Function getUsername
  !insertmacro MUI_HEADER_TEXT $(PAGE_NAMECOMPANY_TITLE) $(PAGE_NAMECOMPANY_SUBTITLE)
  Push $R0
  InstallOptions::dialog $PLUGINSDIR\namecompany.ini
  Pop $R0
  ReadINIStr $UserName "$PLUGINSDIR\namecompany.ini" "Field 2" "state"
  ReadINIStr $Company "$PLUGINSDIR\namecompany.ini" "Field 4" "state"
  MessageBox MB_OK "$UserName$\r$\n$Company"
  Pop $R0
FunctionEnd

Section ""
  SetOutPath $INSTDIR
  File C:\Windows\system32\notepad.exe
  WriteUninstaller $INSTDIR\uninstall.exe
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "DisplayName" "Forth Installer"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "UninstallString" '"$INSTDIR\uninstall.exe"'
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoModify" 1
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}" "NoRepair" 1

SectionEnd

Section "Sample Text File"
  File "license.txt"
SectionEnd

Section /o "Another Sample Text File"
  File "license2.txt"
SectionEnd

Section "Start Menu Shortcuts"
  CreateDirectory "$SMPROGRAMS\${INSTALLATIONNAME}"
  CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
  CreateShortCut "$SMPROGRAMS\${INSTALLATIONNAME}\notepad.lnk" "$INSTDIR\notepad.exe" "" "$INSTDIR\notepad.exe" 0
SectionEnd

Section "Uninstall"
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${INSTALLATIONNAME}"
  Delete $INSTDIR\uninstall.exe
  Delete $INSTDIR\notepad.exe
  Delete  $INSTDIR\license.txt
  Delete  $INSTDIR\license2.txt
  RMDir $INSTDIR
  Delete "$SMPROGRAMS\${INSTALLATIONNAME}\*.*"
  RMDir "$SMPROGRAMS\${INSTALLATIONNAME}"
SectionEnd

Die wichtigsten Änderungen gegenüber dem "Fourth Installer":

Die !include-Anweisung das !insertmacro MUI_LANGUAGE-Kommando und die !insertmacro MUI_PAGE_ ...-Kommandos haben wir bereits oben gesehen.

Die Sections wurden eins-zu-eins aus dem Fourth Installer übernommen. Auch die Functions wurden übenommen, mit einer kleinen aber wichtigen Änderung:

!insertmacro MUI_HEADER_TEXT $(PAGE_NAMECOMPANY_TITLE) $(PAGE_NAMECOMPANY_SUBTITLE)

Mit dieser Zeile wird die Titelzeile für die Custom Page definiert. Diese benötigt, wie aus dem Script ersichtlich, keine spezielle !insertmacro Anweisung. Der Titel und der Untertitel werden mit den LangString-Anweisungen definiert.

Fazit

In den drei Teilen haben wir gesehen, dass man relativ einfach einen Installer zu erstellen. Das NSIS Wiki ist dabei das Portal zu verschiedenen Scripts und Code-Schnippseln, die für viele Anforderungen bereits Lösungsvorschläge bieten.

In meinem Blog werden ich natürlich auch weiterhin Ideen und Lösungen in der Kategorie NSIS posten.