2010-12-14 13 views
6

Czy można wyjść z instalacji z funkcji w sekcji [code] instalatora utworzonego przy pomocy inno setup?Wyjście z instalacji instalacji Inno z [kod]

Nie jestem zainteresowany ustawianiem kodu wyjścia, co chcę zrobić, to przeprowadzić niestandardową kontrolę wymagań i wyjść z instalacji, jeśli to wymaganie nie było wcześniej zainstalowane.

+1

** 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']? –

+0

Odpowiedź na to pytanie: http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

Odpowiedz

3

Spójrz na InitializeSetup i Abort w pomocy InnoSetup. Jak powiedział Cody, jest to możliwe. Jeśli masz problemy, opublikuj to, co zrobiłeś i problem, który masz.

0

Gdzieś w sekcji kodu wykonuje się czek. Dobrze? W wyniku tego testu chcesz wyjść z instalacji. Aby wykonać zjazd umieścić linię:

PostMessage (WizardForm.Handle, $0010, 0, 0); { quit setup, $0010=WM_CLOSE } 

Mam nadzieję, że to pomaga

+0

Można to łatwo obejść przy użyciu trybu cichego ('/silent') –

7

Sposób, w jaki to zrobić jest:

procedure ExitProcess(exitCode:integer); 
    external '[email protected] stdcall'; 

I sposób korzystania z niej jest:

[Code] 
    if .... then begin 
    ExitProcess(0); 
    end; 
+1

Chociaż wygląda na to, że działa z perspektywy użytkownika, pozostawia pliki tymczasowe. – gogowitsch

+0

Ta odpowiedź używa Wizard.Close, który wydaje się unikać tego problemu. http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

+0

Teraz, jeśli tylko mógłbym ukryć monit, jeśli użytkownik chce wyjść ... –

10

Możesz użyć Abort(), jeśli jesteś w tych wydarzenia:

InitializeSetup 
InitializeWizard 
CurStepChanged(ssInstall) 
InitializeUninstall 
CurUninstallStepChanged(usAppMutexCheck) 
CurUninstallStepChanged(usUninstall) 
3

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; 

enter image description here


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; 

enter image description here


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; 

enter image description here


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.

enter image description here


Powiązane problemy