Inno Setup запускает исполняемый файл (для установки драйверов )во время установки

Я использую Inno Setup для создания установщика для своего приложения. Программа установки очень проста и просто копирует некоторые файлы. Это работает очень хорошо, и я доволен этим.

Недавно я внедрил поддержку USB, и для этого мне нужно установить драйвер USB из фонда IVI. По сути, это исполняемый файл, который нужно запустить где-то в процессе установки. До сих пор пользователю приходилось устанавливать драйверы отдельно, что не так элегантно. Мой первый подход был таким:

[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

Это работает, но пользователь должен выбрать правильную разрядность. Преимущество здесь в том, что он может не устанавливать его (, и в этом случае приложение просто игнорирует функциональность USB, и это нормально ). На самом деле я хочу автоматически определить разрядность системы и запустить процесс установки. Это не обязательно должно быть в разделе [Run], хотя я бы ничего не имел против (, потому что пользователь может не устанавливать его ).

Я также нашел код и попытался запустить его вот так:

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

Но это не запускает установку (, хотя я вижу запись в журнале «Начало установки драйвера» ).Что-то не так с моим путем? Что я делаю не так и как изменить этот скрипт, чтобы он автоматически выбирал нужный исполняемый файл в зависимости от разрядности?

РЕДАКТИРОВАТЬ :Я использовал предложенное решение с записью [Tasks]. Реализация выглядит так (просто для справки):

[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

Это работает очень хорошо, большое спасибо за вашу помощь!

9
задан brimborium 12 July 2012 в 09:32
поделиться