Как отменить установку с помощью Inno Setup? - PullRequest
1 голос
/ 22 мая 2009

Я использую программу Inno для установки моего продукта, в программе я запускаю extern-программу (Validator.exe), если эта программа отменяется или прерывается, я должен отменить мой собственный установщик.

Я сохраняю Validator.exe в пути {app} и выполняю его.

Когда работает установщик, я вызываю файл Validator.exe и получаю результат выполнения с помощью: Exec (ExpandConstant ('{app} /Validator.exe'), '', '', SW_SHOW, ewWaitUntilTeridity, ResultCode).

Но это проблемы со всеми решениями, которые я пробовал:

InitializeSetup: Файл Validator.exe еще не скопирован в {app}, поэтому он никогда не будет выполнен.

Прервать: может вызываться только в (InitializeSetup, InitializeWizard, CurStepChanged (ssInstall)), поэтому в этих случаях Validator еще не скопирован.

DeinitializeSetup: я могу запустить Validator.exe после установки, но не могу прервать установку с этого момента.

Мне нужен какой-то способ отменить установку после того, как Validator.exe скопирован и выполнен, возможно, вызовите удаление, но я не смог этого сделать.

Спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 22 мая 2009

Вы можете просто использовать вспомогательную функцию ExtractTeilitaryFile () для извлечения validator.exe на любом предыдущем этапе установки. См. Вопрос inno setup, извлекающий файлы при запуске вместо конца , и мой ответ на него.

2 голосов
/ 22 мая 2009

Спасибо, все работает отлично. Вот как я это исправил:

function InitializeSetup(): Boolean;.
var
  ResultCode : Integer;
begin
  Result := True;
  ExtractTemporaryFile('Validator.exe');

  if Exec(ExpandConstant('{tmp}\Validator.exe'), '', '', SW_SHOW,
    ewWaitUntilTerminated, ResultCode)
  then begin
    if not (ResultCode = 0) then begin
      Result := false;
    end;
  end;
end;
2 голосов
/ 22 мая 2009

В Inno Setup «внешний» файл - это файл, который не включен в EXE-файл установщика. Он существует внешне, предположительно включен как отдельный файл с файлом EXE установщика. Вы говорите, что причина, по которой вы не вызываете Abort в рамках события InitializeSetup, заключается в том, что программа проверки еще не была скопирована в каталог {app}, что понятно, поскольку на тот момент пользователь еще не указал место установки должно быть. Но вам не нужно, чтобы валидатор находился в каталоге назначения. Это уже внешний файл, поэтому просто запустите его из любого каталога, в котором он уже находится.

Другая возможность - поместить необходимые функции проверки в DLL. Вы можете включить DLL в программу установки, и Inno Setup извлечет DLL во временную папку, чтобы вы могли вызывать ее функции из сценария установки.

...