В настоящее время нет возможности проверить успешное выполнение [Run] записей. Код просто регистрирует код выхода процесса и продолжает следующую запись (его можно изучить в исходном файле Setup Inno 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] запись выполняется только тогда, когда ее опция Проверить параметр действительно возвращается истинный. Таким образом, в зависимости от ваших потребностей вы можете либо запускать все бесшумные установки один за другим, а после того, как последний закончен, выполните функцию скрипта, чтобы проверить, что все зависимости были успешно установлены; или вы можете написать функцию проверки для каждой установки зависимостей, которая затем вернет false и, таким образом, пропустит все остальные установки после первого отказа.
Обратите внимание, что все [Run] записей выполняются после завершения действий по копированию файлов, записи в реестре и т. Д., Поэтому вы в основном уже закончили установку. Если вы действительно хотите выполнить все шаги установки только при правильной установке всех зависимостей, то вам придется сделать это раньше в процессе, когда установка может быть отменена.
Edit: Проверьте вопрос "How do you make Inno Setup not look frozen while performing a long Exec?" где даются некоторая информация и пример сценарий связан с об использовании Exec() функции для установки зависимостей. Поэтому, если вы не используете [Run] записей, у вас есть хороший шанс достичь того, чего вы хотите.
Благодаря mghie, я думаю, что это то, что я я ищу. Есть ли какие-либо крючки для отмены в разделе «Запуск»? –
Извините, я отредактировал свой ответ, чтобы добавить дополнительную информацию - похоже, вы не можете делать то, что хотите, используя записи [Run]. – mghie