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.

