Drittinstaller in InnoSetup aufrufen

Problem: neben dem normalen Installer, sollen weitere Komponenten mit installiert werden. Dies sind andere Installationspakete. Im Beispiel ein MSI-Paket (Microsoft Installer) und ein normales Setup. Beide sollen möglichst Silent installiert werden.

Aufnehmen in InnoSetup

Zuerst nehmen wir die beiden Installer ins InnoSetup mit auf:

;Third Party installer
Source: "msi_installer.msi"; DestDir: {tmp}; AfterInstall: RunOtherInstaller;
Source: "schneuse_installer.exe"; DestDir: {tmp}; AfterInstall: RunOtherInstaller2;

Die beiden Installer werden so mit ins Installationspaket aufgenommen. Beim Installieren der Anwendung werden diese dann in ein temporäres Verzeichnis extrahiert. Nach Abschluss der Installation werden diese wieder gelöscht, so dass kein Speicherplatz verschwendet wird.

Nun müssen wir die Installer noch aufrufen. Dies passiert, wie man oben bereits sehen kann, nach der Hauptinstallation in der Methode RunOtherInstaller.

[Code]
procedure RunOtherInstaller;
var
  ResultCode: Integer;
begin
    ShellExec('', 'msiexec.exe', ExpandConstant('/I "{tmp}\msi_installer.msi" /qb+')
        , '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
end;

procedure RunOtherInstaller2;
var
  ResultCode: Integer;
begin
    ShellExec('', ExpandConstant('{app}\schneuse_installer.exe'), '/S'), '', 
    SW_SHOWNORMAL,  ewWaitUntilTerminated, ResultCode);
end;    

Beide Installer werden nacheinander aufgerufen. Es wird jeweils gewartet, dass diese beendet werden, bevor der nächste startet. Es wird ShellExec verwendet. Der normale Aufruf mit Exec hat nicht richtig funktioniert. Hier wurden die Parameter nicht erkannt. Mit ShellExec geht es.

Im Beispiel gibt es keine Fehlerbehandlung. Diese könnte man zusätzlich noch über den Parameter ResultCode realisieren.



Datenschutzerklärung | Impressum