У меня были те же требования: запустить внешнюю программу и отобразить сообщение об ошибке, если код возврата не равен 0. Мне было очень важно запустить программу в разделе Run
, так как мне нужно было отобразить состояниесообщение и индикатор выполнения приятно иметь.
Я обнаружил, что вы можете использовать AfterInstall
в разделе Run
, чтобы запустить выполнение вашей программы и проверить код результата (см. эту ссылку для получения дополнительной информации о AfterInstall
.)
Итак, моя идея заключалась в том, чтобы запустить фиктивную программу, такую как change
, и использовать процедуру, указанную в AfterInstall
, для запуска настоящей программы и перехвата еекод результата.
[Code]
procedure ExecuteRealProgram();
var
ResultCode: Integer;
begin
if Exec(ExpandConstant('{pf32}\Common Files\Authorization.exe'), '', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode)
then begin
if not (ResultCode = 0) then
MsgBox('Error! ResultCode is ' + IntToStr(ResultCode), mbCriticalError, MB_OK);
end
else
MsgBox('Exec failed! Error: ' + SysErrorMessage(ResultCode), mbCriticalError, MB_OK);
end;
end;
[Run]
Filename: "change.exe"; WorkingDir: "{tmp}"; \
StatusMsg: "Running external program. Please wait."; AfterInstall: ExecuteRealProgram