В настоящее время нет способа проверить успешное выполнение [Run] записей. Код просто регистрирует код завершения процесса и продолжает следующую запись (это можно посмотреть в исходном файле Inno Setup Main.pas , функция ProcessRunEntry () , начиная с строка 3404 в текущей версии 5.2.3).
Если вам нужно убедиться, что несколько выполнений msiexec были успешными, вам нужно кодировать промежуточный уровень. Это может быть просто небольшая заглушка, которая выполняется в записях [Run] и запускает msiexec.exe с правильными параметрами, ожидает завершения процесса, а затем записывает код возврата в файл.
Еще один способ проверить успешность такого шага установки - добавить вызов пользовательской процедуры для каждой записи [Run] с помощью параметра AfterInstall . В такой функции вы можете, например, проверить, был ли успешно установлен элемент управления OCX:
[Run]
Filename: "{tmp}\MyInstallation1.exe"; Parameters: "/foo"; AfterInstall: AfterMyInstallation1
[Code]
var
MyInstallation1Success: boolean;
procedure AfterMyInstallation1;
var
V: Variant;
begin
try
V := CreateOleObject('MyInstallation.InstalledOcxControl.1');
MyInstallation1Success := True;
except
MyInstallation1Success := False;
end;
end;
или все ли каталоги и записи реестра для зависимости.
Каждая запись [Run] выполняется только в том случае, если ее необязательный параметр Check возвращает значение true. Таким образом, в зависимости от ваших потребностей вы можете либо запустить все установки без вывода сообщений по очереди, либо после того, как последний завершит выполнение, выполнить функцию сценария, чтобы проверить, что все зависимости были успешно установлены; или вы могли бы написать функцию проверки для каждой установки зависимостей, которая затем возвращала бы false и, таким образом, пропускала все остальные установки после первой неудачной установки.
Обратите внимание, однако, что все записи [Run] выполняются после выполнения шагов для копирования файлов, записи в реестр и т. Д., Поэтому вы в основном уже закончили установку. Если вы действительно хотите выполнить все шаги установки только тогда, когда все зависимости установлены правильно, вам придется сделать это раньше в процессе, когда установку все еще можно отменить.
Редактировать: Ознакомьтесь с вопросом «Как сделать так, чтобы Inno Setup не выглядела застывшей при выполнении длинного Exec?» , где дается некоторая информация и пример сценария связан об использовании функции Exec () для установки зависимостей. Поэтому, если вы не используете записи [Run] , есть хороший шанс достичь желаемого.