Использование кода выхода из процесса для отображения сообщения об ошибке для определенного файла в [Выполнить] - PullRequest
7 голосов
/ 08 марта 2012

Используя innosetup и хотите показать error / msgbox, если один из процессов [RUN] не возвращает код процесса 0. Я использую его для процесса авторизации, если авторизация не прошла успешно, я хочу уведомить пользователя.

У меня есть следующее:

Filename: "{pf32}\Common Files\Authorization.exe"; Parameters: " "{code:GetAuthorizationFilePath}" /s"; WorkingDir: "{tmp}"; Flags: skipifdoesntexist hidewizard; StatusMsg: "Authorizing License"; 

Возвращает меня:

Process exit code:0

0, конечно, успешно, но если нет 0, я хочу уведомить пользователя.

Есть ли способ сделать это?

Спасибо и С уважением, Kev84

Ответы [ 2 ]

7 голосов
/ 08 марта 2012

Я думаю, что нет способа сделать это из раздела [Run]. Что вы можете сделать, это:

  • используйте скрипт Pascal для этой задачи
  • или отобразите модальное сообщение об ошибке из исполняемого вами приложения Authorization.exe и завершите его только после того, как пользователь подтвердит сообщение об ошибке (установка продолжится, например, с выполнением других файлов в разделе [Run])

Вот пример кода скрипта Паскаля; Вы также можете проверить commented version этого кода:

[Code]

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ResultCode: Integer;
begin
  Result := True;

  if CurPageID = wpWelcome then
  begin
    Result := False;
    if Exec(ExpandConstant('{pf32}\Common Files\Authorization.exe'), '', '', 
      SW_SHOW, ewWaitUntilTerminated, ResultCode) then
    begin
      if ResultCode = 0 then    
        Result := True
      else
        MsgBox('The authorization failed!', mbCriticalError, MB_OK);
    end;
  end;
end;
3 голосов
/ 15 июля 2015

У меня были те же требования: запустить внешнюю программу и отобразить сообщение об ошибке, если код возврата не равен 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...