2012-07-10 17 views
6

Używam Inno Setup do utworzenia instalatora dla mojej aplikacji. Instalator jest bardzo prosty i po prostu kopiuje niektóre pliki. Działa to bardzo dobrze i jestem z tego zadowolony.Inno Setup uruchamianie (instalowanie sterowników) podczas instalacji

Niedawno zaimplementowałem obsługę USB i trzeba zainstalować sterownik USB z fundacji IVI. Jest to w zasadzie plik exe, który musi zostać uruchomiony gdzieś podczas procesu instalacji. Do tej pory użytkownik musi zainstalować sterowniki osobno, co nie jest tak eleganckie. Moje pierwsze podejście było następujące:

[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 

Działa to, ale użytkownik musi wybrać prawidłową bitness. Zaletą jest to, że może on nie instalować (w takim przypadku aplikacja po prostu ignoruje funkcjonalność USB, która jest w porządku). To, czego naprawdę chcę, to automatyczne wykrycie wydajności systemu i uruchomienie procesu instalacji. Nie musi to być sekcja [Run], chociaż nie miałbym nic przeciwko temu (ponieważ użytkownik może wybrać, aby go nie instalować).

Ja również znaleźć jakiś kod i próbował uruchomić go tak:

[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; 

Ale to nie rozpocząć instalację (choć widzę wpis dziennika „Uruchamianie instalacji sterownika”). Czy coś jest nie tak z moją ścieżką? Co robię źle i jak mogę zmienić ten skrypt, aby automatycznie wybrać odpowiedni plik wykonywalny w zależności od bitness?

EDYCJA: Użyłem proponowanego rozwiązania z wpisem [Tasks]. Implementacja wygląda następująco (tylko w celach informacyjnych):

[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 

Działa to bardzo dobrze, bardzo dziękuję za pomoc!

Odpowiedz

8

W tym przypadku, to najlepiej, aby usunąć flagę postinstall tak, że działa bezwarunkowo na końcu procesu instalacji (ale zanim to mówi gotowe) i dodać parametr Check: do ograniczenia go do właściwej bitness:

[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 

Jeśli chcesz, aby było to warunkowe, możesz użyć normalnego wpisu [Tasks], który monituje przed rozpoczęciem instalacji.

+0

Bardzo dobrze, wielkie dzięki, właśnie tego chciałem! :) – brimborium

+1

Dodałem także moje ostateczne rozwiązanie (z wpisem '[Tasks]') na dole mojego pytania. – brimborium

+0

Thx, rzeczywiście literówka. ;) – brimborium

Powiązane problemy