2012-07-10 2 views
6

Ich verwende Inno Setup, um ein Installationsprogramm für meine Anwendung zu erstellen. Das Installationsprogramm ist sehr einfach und kopiert nur einige Dateien. Das funktioniert sehr gut und ich bin damit zufrieden.Inno Setup startet ausführbare Datei (um Treiber zu installieren) während der Installation

Ich habe vor kurzem USB-Unterstützung implementiert und muss dafür den USB-Treiber von der IVI-Stiftung installieren. Es ist im Grunde eine EXE-Datei, die irgendwo während des Setup-Prozesses gestartet werden muss. Bis jetzt muss der Benutzer die Treiber separat installieren, was nicht so elegant ist. Mein erster Ansatz war dies:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; Description: "Install USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; Description: "Install 64bit USB driver (IVI Foundation)"; Flags: postinstall skipifsilent 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: postinstall skipifsilent 

Dies funktioniert, aber der Benutzer muss die richtige Bitness auswählen. Der Vorteil hier ist, dass er wählen kann, es nicht zu installieren (in diesem Fall ignoriert die Anwendung einfach die USB-Funktionalität, die in Ordnung ist). Was ich eigentlich will, ist die Bissigkeit des Systems automatisch zu erkennen und den Setup-Prozess zu starten. Dies muss nicht in der [Run] Abschnitt sein, obwohl ich nichts dagegen haben würde (weil der Benutzer wählen kann, es nicht zu installieren).

Ich fand auch einige Code und versucht, es wie folgt auszuführen:

[Code] 
procedure CurStepChanged (CurStep: TSetupStep); 
var 
    WorkingDir: String; 
    ReturnCode: Integer; 
begin  
    if (ssInstall = CurStep) then 
    Log('Starting driver installation'); 
    WorkingDir := ExpandConstant ('{app}\driver'); 
    Exec ('IviSharedComponents_2.2.1.exe', '', WorkingDir, SW_SHOW, ewWaitUntilTerminated, ReturnCode); 
end; 

Aber nicht startet die Installation (obwohl ich den Log-Eintrag sehen können "Starttreiberinstallation). Stimmt etwas nicht mit meinem Weg? Was mache ich falsch und wie könnte ich dieses Skript ändern, um automatisch die richtige ausführbare Datei abhängig von der Bissigkeit auszuwählen?

EDIT: Ich habe die vorgeschlagene Lösung mit dem [Tasks] Eintrag verwendet. Die Implementierung sieht wie folgt aus (nur als Referenz):

[Tasks] 
Name: "install_usb"; Description: "Install USB drivers (IVI Foundation)"; GroupDescription: "External drivers:"; 

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Tasks: install_usb; Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Tasks: install_usb; Flags: skipifsilent 

Das funktioniert sehr gut, vielen Dank für Ihre Hilfe!

Antwort

8

In diesem Fall ist es am besten die post Flag zu entfernen, so dass er sich bedingungslos am Ende des Setup-Prozesses läuft (aber, bevor er sagt fertig) und fügen Sie einen Check: Parameter es auf die richtige Bitness zu begrenzen:

[Run] 
Filename: "{app}\driver\IviSharedComponents_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: Not IsWin64(); Flags: skipifsilent 
Filename: "{app}\driver\IviSharedComponents64_2.2.1.exe"; StatusMsg: "Installing USB driver (IVI Foundation)"; Check: IsWin64(); Flags: skipifsilent 

Wenn Sie möchten, dass dies bedingt ist, können Sie einen normalen [Tasks]-Eintrag verwenden, der vor dem Start des Setups angezeigt wird.

+0

Sehr gut, vielen Dank, das ist genau das, was ich wollte! :) – brimborium

+1

Ich habe auch meine endgültige Lösung (mit dem '[Aufgaben]' Eintrag) am Ende meiner Frage hinzugefügt. – brimborium

+0

Thx, Tippfehler in der Tat. ;) – brimborium

Verwandte Themen