2013-10-25 7 views
20

Dies ist der [Files] Teil meiner Code so weit:Inno Setup: andere Installer installieren und ausführen, bevor meine installieren fort

[Files] 
Source: "other_installer.exe"; DestDir: "{app}" 
Source: "myprogram.exe"; DestDir: "{app}" 
Source: "data.dat"; DestDir: "{app}" 
Source: "otherdata.dat"; DestDir: "{app}" 

Mein Programm ist auf einem anderen Programm abhängig zu laufen. Ich habe das Installationsprogramm für dieses Programm ("other_installer.exe") in mein Installationsprogramm aufgenommen. Was ich tun möchte, ist dieses Installationsprogramm zu starten, sobald es kopiert wurde, bevor Sie mit "myprogram.exe" und dem Rest fortfahren.

Ich habe gegoogled und fand die Dokumentation für BeforeInstall in der Inno-Setup-Hilfe, aber sie haben kein Beispiel zum Ausführen einer anderen Anwendung. Ich glaube, es sollte so etwas wie dieses:

[Files] 
Source: "other_installer.exe"; DestDir: "{app}" 
Source: "myprogram.exe"; DestDir: "{app}"; BeforeInstall: // RUN OTHER_INSTALLER.EXE // 
Source: "data.dat"; DestDir: "{app}" 
Source: "otherdata.dat"; DestDir: "{app}" 

Antwort

24

Besser für die Art und Weise Sie die AfterInstall Parameter gehen konnte. Das folgende Skript führt die RunOtherInstaller-Funktion direkt aus, nachdem der OtherInstaller.exe-Dateieintrag verarbeitet wurde. Dort versucht es die gerade installierte OtherInstaller.exe Datei auszuführen und wenn das fehlschlägt, meldet es dem Benutzer eine Fehlermeldung. Bitte beachten Sie, dass Sie die Installation von dieser Funktion nicht unterbrechen können, so dass es nicht viel sicher zu tun, was Sie auf diese Weise wollen:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Files] 
Source: "OtherInstaller.exe"; DestDir: "{app}"; AfterInstall: RunOtherInstaller 
Source: "OtherFile.dll"; DestDir: "{app}" 

[Code] 
procedure RunOtherInstaller; 
var 
    ResultCode: Integer; 
begin 
    if not Exec(ExpandConstant('{app}\OtherInstaller.exe'), '', '', SW_SHOWNORMAL, 
    ewWaitUntilTerminated, ResultCode) 
    then 
    MsgBox('Other installer failed to run!' + #13#10 + 
     SysErrorMessage(ResultCode), mbError, MB_OK); 
end; 
+0

Wäre es möglich, den Fehler zu speichern und die Installation später zu unterbrechen (und möglicherweise rückgängig zu machen)? – Septagram

0

Sie können mit Afterinstall, suchen diese in der Hilfe. Wenn die Datei gerade kopiert wird, starte ich die Funktion/Prozedur, die Sie als "AfterInstall:" angeben.

Verwenden Sie in dieser Funktion/Prozedur Exec und starten Sie das andere Installationsprogramm.

+0

Ja, es tut mir leid, wenn meine Antwort der Ihren ähnlich ist –

8

Eine weitere gute Zeit zum Ausführen vorausgesetzte Installer ist in der PrepareToInstall Event-Funktion. (Siehe die Beispielskripte, die mit Inno für die Grundstruktur und TLama den Code für die eigentliche Ausführung.)

Der Hauptvorteil von PrepareToInstall ist, dass es Ihnen erlaubt, Fehler und Neustart-Anforderungen vom Kind Installateur zu handhaben - mit AfterInstall nicht.

Der Hauptnachteil davon ist, dass Sie manuell müssen ExtractTemporaryFile alles erforderlich, um die untergeordnete Installation ausführen, wie dies vor dem Extrahieren von Dateien geschieht.

Verwandte Themen