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!
Sehr gut, vielen Dank, das ist genau das, was ich wollte! :) – brimborium
Ich habe auch meine endgültige Lösung (mit dem '[Aufgaben]' Eintrag) am Ende meiner Frage hinzugefügt. – brimborium
Thx, Tippfehler in der Tat. ;) – brimborium