Поведение нечетного исключения в скрипте Inno при объявлении CurPageChanged - PullRequest
0 голосов
/ 18 мая 2018

В приведенном ниже сценарии процедура AfterInstall (SetupOperation) выполняется после установки установленного файла. Если это не удается, я хочу прервать установку, что я делаю, вызывая WizardForm.Close. Проблема в том, что если процедура CurPageChanged просто объявлена, то исключение никогда не перебрасывается должным образом в SetupOperation. Если я это закомментирую, все будет работать правильно. Должно быть что-то простое, что мне не хватает.

[Setup]
DisableDirPage=yes
DisableProgramGroupPage=yes
AppID=someuniqueid
DefaultDirName={pf}\MyCompany\ExampleApp
SetupLogging=yes
AppName=ExampleApp
AppVersion=1.2.3.4
AppVerName=ExampleApp 1.2.3.4
AppPublisher=MyCompany
OutputBaseFilename=MyCompany.ExampleApp.1234

[Files]
Source: "d:\temp\test.txt"; DestDir: "{commonappdata}\MyCompany\ExampleApp"; AfterInstall: SetupOperation

[Code]
var SharedProgressPage: TOutputProgressWizardPage;

// Called by Inno to initialize the user interface
procedure InitializeWizard();
begin
    Log('InitializeWizard called');

    SharedProgressPage := CreateOutputProgressPage('Installing', 'Please wait while Setup installs the ExampleApp on your computer.');
    SharedProgressPage.SetProgress(0,1);
    SharedProgressPage.ProgressBar.Style := npbstMarquee;
end;

// Called when the current wizard page changes
procedure CurPageChanged(CurPageID: Integer);
begin

end;

procedure SetupOperation();
begin
    Log('SetupOperation called');

    try
        SharedProgressPage.SetText('', '');
        SharedProgressPage.Show;

        try
            SharedProgressPage.SetText('Performing operation...', '');
            RaiseException('Some weird error');
        except
            Log('Caught an exception; re-raising');
            RaiseException(GetExceptionMessage());
        finally
            Log('Closing progress page');
            SharedProgressPage.Hide;
        end;
    except
        Log('An error occurred setting performing the operation: ' + GetExceptionMessage());
        WizardForm.Close();
    end;
end;

Возможно, это связано с использованием TOutputProgressWizardPage, но я не понимаю, как это сделать. Кажется, он отображается / скрывается правильно.

...