PDFCreator ist vom Hersteller mit Inno-Setup gepackt worden, was verschiedene Installationsvarianten ermöglicht. Eine vollständige Liste aller Inno-Setup Befehle findet ihr hier. Ich verwende gerne die integrierte Aufzeichnung, so kommt man einfach und schnell zum Ziel. Dazu in der Kommandozeile das Setup mit dem Parameter SAVEINF aufrufen:
PDFCreator-3_1_2-Setup.exe /SAVEINF=“silent.inf“
Dann die gewünschten Einstellungen treffen. Nach Abschluss der Installation findet ihr im selben Ordner die Datei „silent.inf“ (je nachdem, wie ihr sie benannt habt, auch abweichend davon).
Bei mir sieht die Datei folgendermaßen aus:
[Setup]
Lang=German
Dir=C:\Program Files\PDFCreator
Group=PDFCreator
NoIcons=0
SetupType=custom
Components=program
Tasks=winexplorer
Printername=PDFCreator
Die Sprache habe ich auf Deutsch gestellt, ich möchte keine Desktop-Icons und nur den PDFCreator inkl. Drucker. Im nächsten Schritt kann man schon eine erste Version des Escripts erzeugen und die Installation testen:
In der Script.inc sieht dies folgendermaßen aus:
RunAsEx(‚.\Extern$\PDFCreator-3_1_2-Setup.exe‘,’/LOADINF=“.\Extern$\install.inf“ /VERYSILENT /NORESTART /LOG=“%LogFileSettings.LogFilePath%\%CurrentPackage.Object.Name%-install.log“‚,“,“,’15‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
If not %returncode%=’0′
System_Reset/?/TS
ExitProcEx(Failed,’The execution of %CurrentPackage.Object.Name% with Error Code %returncode%‘)
ExitProcEx(Done,’Installation of %CurrentPackage.Object.Name% sucessfully.‘)
!
Die Installation lief erfolgreich, es sind leider noch Nacharbeiten offen. Im Startmenü sind noch verschiedene Links, die ich nicht möchte (Programmaufruf und Hilfe sollen bleiben):
Dazu im Script folgendes hinzufügen:
In der Script.inc sieht dies folgendermaßen aus:
RemoveFolder(‚Programs\PDFCreator\Licenses‘,cgAsCommon)/TS
RemoveLink(‚PDFCreator im Internet‘,“,’Programs\PDFCreator‘,cgAsCommon)/TS
RemoveLink(‚Spende für den PDFCreator‘,“,’Programs\PDFCreator‘,cgAsCommon)/TS
Und im Startmenü zeigt sich damit dieses Bild:
Nun wird es Zeit, den PDFCreator das erste Mal zu starten. Es öffnet sich ein Willkommensfenster, das ebenfalls entfernt werden soll:
Weiterhin versucht die Software, sich einmal wöchentlich selbst zu aktualisieren, was ich natürlich auch nicht möchte. In der Software findet ihr die Einstellung hier (ich habe sie hier schon mal auf „niemals“ gesetzt):
Beide Einstellungen finden sich in der Registry:
Der Schlüssel für das Wilkommenspopup ist folgender:
[HKEY_CURRENT_USER\Software\pdfforge\PDFCreator]
„LatestWelcomeVersion“=“v3.1.2 Build 10844“
Und für das automatische Update:
[HKEY_USERS\.DEFAULT\Software\pdfforge\PDFCreator\Settings\ApplicationSettings]
„UpdateInterval“=“Never“
Beide Keys sollen nun in mein Escript eingebaut werden. Dazu exportiere ich den gesamten Schlüssel (wichtig: als Dateityp Win9x-/NT4-Registrierungsdatei wählen, sonst kommt DSM damit nicht zurecht):
Aus der enthaltenen User.reg alle Teile entfernen, die nicht zu unseren gewünschten Einstellungen gehören und dann unter dem Namen User.nir im Paketverzeichnis abspeichern.
Bei mir bleibt folgendes übrig:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\pdfforge]
[HKEY_CURRENT_USER\Software\pdfforge\PDFCreator]
„LatestWelcomeVersion“=“v3.1.2 Build 10844“
Mit dem zweiten Registryschlüssel einfach genauso verfahren, als Standard.nir abspeichern und ins Paketverzeichnis kopieren.
Die User.nir dann noch mit dem Befehl „RegLoad“ in das Script einbinden (da es der Benutzerteil der Registry ist, auch unbedingt als benutzerbezogenen Befehl flaggen) und die Standard.nir als per Service auszuführender Befehl (computerbezogen):
In der Script.inc sieht dies folgendermaßen aus:
RunAsEx(‚.\Extern$\PDFCreator-3_1_2-Setup.exe‘,’/LOADINF=“.\Extern$\install.inf“ /VERYSILENT /NORESTART /LOG=“%LogFileSettings.LogFilePath%\%CurrentPackage.Object.Name%-install.log“‚,“,“,’15‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
RemoveFolder(‚Programs\PDFCreator\Licenses‘,cgAsCommon)/TS
RemoveLink(‚PDFCreator im Internet‘,“,’Programs\PDFCreator‘,cgAsCommon)/TS
RemoveLink(‚Spende für den PDFCreator‘,“,’Programs\PDFCreator‘,cgAsCommon)/TS
RegLoad(‚.\user.nir‘)/TU
RegLoad(‚.\Standard.nir‘)/TS
If not %returncode%=’0′
System_Reset/?/TS
ExitProcEx(Failed,’The execution of %CurrentPackage.Object.Name% with Error Code %returncode%‘)
ExitProcEx(Done,’Installation of %CurrentPackage.Object.Name% sucessfully.‘)
Zum Schluss noch die Überprüfung, ob vorher ein Reboot nötig ist (Näheres dazu hier) und ein wichtiger Hinweis: Falls eine ältere Version von PDFCreator installiert ist, muss diese vorher deinstalliert werden. Ein Update wird nicht unterstützt.
In der Script.inc sieht dies folgendermaßen aus:
!Prüfung, ob bereits installiert und ggf. Deinstallation
If Exist(‚C:\Program Files\PDFCreator\unins000.exe‘)/x64
RunAsEx(‚%ProgramFilesDir64%\PDFCreator\unins000.exe‘,’/VERYSILENT /NORESTART /LOG=“%LogFileSettings.LogFilePath%\%CurrentPackage.Object.Name%-uninstall.log“‚,“,“,’15‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
Da auch keine automatische Deinstallation durch DSM unterstützt wird, kann man den Skriptschnipsel auch gleich für die saubere Deinstallation der Software verwenden.
Wenn man alles zusammenschreibt, ergibt sich folgendes Bild:
In der Script.inc sieht es wie folgt aus:
!
!Variablen initialisieren
Set(‚Returncode‘,’0′)
!
!Prüfen ob Reboot nötig
If RegKeyExistsEx(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending‘,reUseX64Hive) or RegKeyExistsEx(‚HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired‘,reUseX64Hive) or RegValueExistsEx(‚HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager‘,’PendingFileRenameOperations‘,reUseX64Hive)
System_Reset/?/TW
ExitProcEx(Undone,’Installation kann erst nach einem Neustart erfolgen‘)
!
!Prüfung, ob bereits installiert und ggf. Deinstallation
If Exist(‚C:\Program Files\PDFCreator\unins000.exe‘)/x64
RunAsEx(‚%ProgramFilesDir64%\PDFCreator\unins000.exe‘,’/VERYSILENT /NORESTART /LOG=“%LogFileSettings.LogFilePath%\%CurrentPackage.Object.Name%-uninstall.log“‚,“,“,’15‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
!
!Installation
RunAsEx(‚.\Extern$\PDFCreator-3_1_2-Setup.exe‘,’/LOADINF=“.\Extern$\install.inf“ /VERYSILENT /NORESTART /LOG=“%LogFileSettings.LogFilePath%\%CurrentPackage.Object.Name%-install.log“‚,“,“,’15‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
RemoveFolder(‚Programs\PDFCreator\Licenses‘,cgAsCommon)/TS
RemoveLink(‚PDFCreator im Internet‘,“,’Programs\PDFCreator‘,cgAsCommon)/TS
RemoveLink(‚Spende für den PDFCreator‘,“,’Programs\PDFCreator‘,cgAsCommon)/TS
RegLoad(‚.\user.nir‘)/TU
RegLoad(‚.\Standard.nir‘)/TS
If not %returncode%=’0′
System_Reset/?/TS
ExitProcEx(Failed,’The execution of %CurrentPackage.Object.Name% with Error Code %returncode%‘)
ExitProcEx(Done,’Installation of %CurrentPackage.Object.Name% sucessfully.‘)
!
!
: $BeginUninstallScript
RunAsEx(‚%ProgramFilesDir64%\PDFCreator\unins000.exe‘,’/VERYSILENT /NORESTART /LOG=“%LogFileSettings.LogFilePath%\%CurrentPackage.Object.Name%-uninstall.log“‚,“,“,’15‘,’returncode‘,raUseLocalSystem+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW