Einleitung
Im zweiten Teil des Tutorials erweiterten wir unseren Installer 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:
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 hinzugefügten Dialoge möchten wir nun natürlich auch mit dem Modern User Interface umsetzen.
And here we go:
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 Section
s wurden eins-zu-eins aus dem Fourth Installer übernommen. Auch die Function[/cc]s wurden übernommen, mit einer kleinen aber wichtigen Änderung:
[cci lang="nsis"]!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 erstellen kann. Das NSIS Wiki ist dabei das Portal zu verschiedenen Scripts und Code-Schnippseln, die für viele Anforderungen bereits Lösungsvorschlaege bieten.
In meinem Blog werde ich natürlich auch weiterhin Ideen und Lösungen in der Kategorie NSIS posten.
Guten Tag, Herr Baer,
ganz grosse Klasse; ich habe Ihr Tutorial durchgearbeitet und habe es so schnell verstand wie schon lange nicht mehr. Alle Beispiele konnte ich schnell und feherfrei nachvollziehen.
Ganz herzlichen Dank für diese Arbeit.
Beste Grüße in die Schweiz
Bruno Berlin
Super Tutorial 🙂
hatte immer nur einen Fehler. Die license Dateien durfen bei mir keine .txt Dateien sein. Sondern sie mussten bei mir .rtf Dateien sein.
Aber dennoch ein klasse Tutorial !
Super, vielen Dank!
Hallo Herr Baer,
vielen Dank für die Anleitung, das hat mir den Einstieg in NSIS sehr erleichtert.
Viele Grüße
Thank you very much for your tutorial. İ was looking a lot in internet but I couldn’t find any better explanation than that. Fortunately I know german language enough to understand reading. Ich werde vebessern meine deutsche auch, fiele danke .
sehr gut 🙂 danke dir für die Mühe während der Vorbereitung des Tutorials.
Lg aus München,
Hallo Atilla
Vielen Dank für Dein nettes Feedback. Es freut mich jedes Mal, wenn ich sehe dass meine Mühe jemand anderem weiterhilft.
Very helpful to get started. Thanks a lot !