aby zapobiec uruchamianiu instalatora, gdy badanie przesłanek nie powiedzie się, po prostu wrócić False
z InitializeSetup
. Spowoduje to wyjście z instalatora nawet przed wyświetleniem kreatora.
function InitializeSetup(): Boolean;
begin
Result := True;
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK);
Result := False;
end;
end;
Jeśli trzeba przetestować warunki tuż przed rozpoczęciem tylko instalacja (czyli InitializeSetup
jest zbyt wcześnie), można wywołać Abort
function z CurStepChanged(ssInstall)
:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK);
Abort;
end;
end;
end;
Choć dla tego scenariusza, należy rozważyć użycie mechanizmu PrepareToInstall
event function zamiast wychodzenia konfigurację.
function PrepareToInstall(var NeedsRestart: Boolean): String;
begin
Result := '';
if not PrerequisitesTest then
begin
Result := 'Prerequisites test failed';
end;
end;
Jeśli trzeba wymusić zakończenie instalatorowi dowolnym innym momencie, użyj połączenia ExitProcess
WinAPI:
procedure ExitProcess(uExitCode: Integer);
external '[email protected] stdcall';
function NextButtonClick(CurPageID: Integer): Boolean;
begin
if CurPageID = wpReady then
begin
if not PrerequisitesTest then
begin
SuppressibleMsgBox('Prerequisites test failed', mbError, MB_OK, MB_OK);
ExitProcess(1);
end;
end;
Result := True;
end;
Choć jest to wyjście dość niebezpieczne, więc należy używać go tylko jako podejście ostateczne.
** Tak, jest to możliwe. ** Czy nadzieję, że ktoś będzie napisać kod dla ciebie? Czy możesz przynajmniej opublikować kod, który już posiadasz w sekcji "[code']? –
Odpowiedź na to pytanie: http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101