В приведенном ниже сценарии процедура 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, но я не понимаю, как это сделать. Кажется, он отображается / скрывается правильно.