Inno Setup, skriptbasiertes Installationsprogramm

Inno Setup ist ein skriptbasiertes Open-Souce-Programm. Mit dem Programm sind wir in der Lage auf einfache Weise Installationsroutinen zu erstellen. Inno Setup ist kostenlos. Das was wir brauchen, ist das Programm selbst und ein Texteditor. Im Internet findet man sehr gute Dokumentation.

Diese Artikel beschäftigt sich nur mit der Signierung der eigenen Programme als auch der Signierung der Installationsprogramme.
Um praktisch das zu realisieren brauchen wir,

  • Inno Setup Programm. das kann man aus dem Internet herunterladen
  • ein Programm das in einer Programmiersprache erstellt ist
  • Ein pfx-Zertifikat. Sehe Public Code Signing bzw. Private Code Signing
  • Ein Programm zum Signieren z.B. signtool. Wie man das Tool installiert finden Sie im Artikel "Public Code Signing"

Um die Signierung zu testen stelle ich HIER ein pfx-Testzertifikat und CA-Testzertifikat zur Verfügung. Sie selbst benötigen auf Ihrem Windows Gerät das Programm Inno Setup und signtool.

Punkt
Zuerst überprüfen wir die Signierung in einem CMD Fenster. Ich nehme an, dass Sie schon die zwei Zertifikate runterladen haben. Das CA-Zertifikat sollten wir importieren. Ein Doppelklick mit der Maus auf das CA-Zertifikat und Sie können das Zertifikat importieren. Wählen Sie unbedingt den Zertifikat Ordner "Vertrauenswürdige Stammzertifizierungsstellen" aus. Das pfx Zertifikat kopieren wir einfach in den Order "Examples" von Inno Setup. In CMD-Fenster signieren wir zuerst das Programm "MyProg.exe" in dem Order "Examples" von Inno Setup.
Wie man das macht ist in den Artikel Public Code Signing und Private Code Signing beschrieben.
Punkt
Wir starten Inno Setup und öffnen die Beispieldatei CodeExample1.iss. Das ist die einfachste Setupdatei, aber mehr brauchen wir nicht. Wir machen allerdings kleine Anpassung, damit wird alles verständlicher. Nach dem Compilieren wird eine Datei mit dem Namen Install_MyProg.exe im Ordner C:\Install_Output erstellt. Auch wenn der Ordner noch nicht vorhanden ist, wird es erstellt.

[Setup]
AppName=My Program
AppVersion=1.5
WizardStyle=modern
DefaultDirName={autopf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma2
SolidCompression=yes
; OutputDir=userdocs:Inno Setup Examples Output
OutputDir=C:\Install_Output
OutputBaseFilename=Install_MyProg


[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"
Punkt
Um die Output-Datei gleich zu signieren, müssen wir in Inno Setup ein Variable definieren, der Variable den entsprechenden Befehl zuweisen und die Inno Setup Konfigurationsdatei anpassen.

Punkt
Es wird eine Variable z.B. mySign definiert, die wir später in unserer Konfigurationsdatei einsetzen werden.

Punkt
Der definierte Variable wird der signtool Befehl zugewiesen. Der Befehl sollte so sein, wie wir das in CMD Fenster gemacht haben, allerdings mit kleiner Änderung, wenn es um die Output-Datei geht.

Als Beispiel wird auf folgende Weise in CMD Fenster unser Programm Install_MyProg signiert. Wenn nötig bitte entsprechende Pfade zu signtool und TestDEV.pfx eintragen

 

C:\...>signtool sign /v /f TestDEV.pfx /t http://timestamp.digicert.com /fd SHA256 c:\Install_Output\Install_MyProg.exe

 

In unserem Sign Tools Fenter von Inno Setup machen wir ein ähnlicher Eintrag. So wie schon angesprochen war, die Ausgabe macht Inno Setup selbst, abhängig von den definierten Informationen wie OutputDir und OutputBaseFilename

 

"<PfadZuSingTool>\signtool.exe" sign /v /f "<PfadZuPfxCertDatei>\TestDEV.pfx" /t http://timestamp.sectigo.com /fd SHA256 $f
Punkt
Nach dem Bestätigen mit OK haben wir in Inno Setup eine Variable mySign. Sollten wir weitere Zertifikatsdatei zur Verfügung haben, können wir weitere Variablen definieren.

Punkt
Jetzt müssen wir noch unsere Skript-Datei in Inno Setup in dem Bereich [Setup] anpassen, kurz gesagt ein Eintrag (SignTool=mySign) einfügen. Beachten Sie bitte dabei Groß-/Kleinschreibung.

[Setup]
AppName=My Program
AppVersion=1.5
WizardStyle=modern
DefaultDirName={autopf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma2
SolidCompression=yes
; OutputDir=userdocs:Inno Setup Examples Output
OutputDir=C:\Install_Output
OutputBaseFilename=Install_MyProg
SignTool=mySign

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.chm"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

Punkt
Wenn wir ein Zertifikat von einer Zertifizierungsstelle erworben haben, kommt bei der Installation des Programms ein Benutzerkontensteuerung-Fenster und unter "Verifizierte Herausgeben" sehen wir unsere Firma bzw. unseren Programmierer. Das ist abhängen von dem was wir bei der Beantragung des Zertifikates angegeben haben.

Wenn wir die Zertifikate selbst erstellt haben und selbst bestätigt haben, sollten wir noch auf jedem Gerät in der Domäne das CA Zertifikat in "Vertrauenswürdige Stammzertifizierungsstellen" eintragen, dann sehen wir auch den "Verifizierten Herausgeber".
Punkt
Eine Sache sollten wir nicht vergessen. Es wäre schon angebracht, unsere ausführbare Datei zu signieren, bevor wir das Installationsprogramm erstellen. Dazu können wir einfach eine BAT-Datei nutzen. Ich gehe davon aus, dass
  • signtools ist auf dem Rechner installiert
  • pfx-Zertifikatdatei begindet sich im gleichen Ordner wie unsere ausführbare Datei
@ECHO OFF
<PfadZuSingtools>\signtool sign /v /f <PfadZuCertDatei>\TestDEV.pfx /t http://timestamp.sectigo.com /fd SHA256 <PfadZuEXE>\myProg.exe
pause