Добавьте выполнение функции в прогресс инсталлятора установки inno - PullRequest
0 голосов
/ 04 декабря 2011

Я делаю патч для старой игры (Command & Conquer 1, издание для Win95), и в некоторых случаях для выполнения патча требуется выполнить функцию, написанную в скрипте Pascal, что может занять довольно много времени.

В данный момент я выполняю это в тот момент, когда страница изменяется на страницу «установки», поэтому после того, как пользователь выбрал все параметры и подтвердил установку, прямо перед тем, как установщик фактически начнет добавлять (и удалять)файлы.

procedure CurPageChanged(CurPageID: Integer);
begin
    if (CurPageID = wpInstalling) then
    begin
        // Rename all saveg_hi.### files to savegame.###
        renameSaveGames();
        // clean up the ginormous files mess left behind if the game was installed from the 'First Decade' compilation pack
        cleanupTFD();
    end;
end;

Но так как процесс может быть довольно долгим, я бы предпочел как-то добавить его в индикатор выполнения фактической установки.Есть ли способ сделать это?

1 Ответ

6 голосов
/ 10 декабря 2011

Вы можете управлять ProgressGauge со страницы установки WizardForm.В следующем скрипте показано, как обновить индикатор выполнения из цикла (который вы просто замените своими действиями).В целях безопасности значения индикатора выполнения, такие как min, max и position, сохраняются до выполнения пользовательских действий и восстанавливаются после их выполнения.

[Code]
procedure CurPageChanged(CurPageID: Integer);
var
  I: Integer;
  ProgressMin: Longint;
  ProgressMax: Longint;
  ProgressPos: Longint;
begin
  if CurPageID = wpInstalling then
  begin
    // save the original "configuration" of the progress bar
    ProgressMin := WizardForm.ProgressGauge.Min;
    ProgressMax := WizardForm.ProgressGauge.Max;
    ProgressPos := WizardForm.ProgressGauge.Position;

    // output some status and setup the min and max progress values
    WizardForm.StatusLabel.Caption := 'Doing my own pre-install...';
    WizardForm.ProgressGauge.Min := 0;
    WizardForm.ProgressGauge.Max := 100;
    // here will be your time consuming actions with the progress update
    for I := 0 to 100 do
    begin
      WizardForm.FilenameLabel.Caption := 'I''m on ' + IntToStr(I) + '%';
      WizardForm.ProgressGauge.Position := I;
      Sleep(50);
    end;

    // restore the original "configuration" of the progress bar
    WizardForm.ProgressGauge.Min := ProgressMin;
    WizardForm.ProgressGauge.Max := ProgressMax;
    WizardForm.ProgressGauge.Position := ProgressPos;
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...