2010-12-14 14 views
6

E 'possibile uscire dall'installazione da una funzione nella sezione [code] di un programma di installazione creato con inno setup?Uscita da Inno Setup Installazione da [code]

Non sono interessato all'impostazione del codice di uscita, quello che voglio fare è eseguire un controllo personalizzato per un requisito e uscire dall'installazione se tale requisito non è stato precedentemente installato.

+1

** Sì, è possibile. ** speri che qualcuno scriverà il codice per voi? Puoi almeno postare qualsiasi codice che hai già nella sezione '[code']? –

+0

La domanda è stata data qui: http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

risposta

3

Dai un'occhiata a InitializeSetup e Abort nella guida di InnoSetup. Come ha detto Cody, è possibile. Se hai problemi, pubblica ciò che hai fatto e il problema che stai riscontrando.

0

Da qualche parte nella sezione del codice si esegue un controllo. Destra? Come risultato di questo controllo, si vuole uscire dall'installazione. Per eseguire l'uscita inserire la riga:

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

Speriamo che questo aiuta

+0

Questo può essere facilmente ignorato usando una modalità silenziosa ('/silent') –

7

Il modo in cui lo faccio è:

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

E il modo di usarlo è:

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

Anche se sembra funzionare dal punto di vista dell'utente, lascia i file temporanei dietro. – gogowitsch

+0

Questa risposta utilizza Wizard.Close che sembra evitare questo problema. http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

+0

Ora se solo potessi sopprimere il prompt se l'utente desidera uscire ... –

10

È possibile utilizzare Abort() se si è in questi eventi:

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

Per evitare che l'installatore da corsa, quando i prerequisiti test ha esito negativo, basta tornare False dalla InitializeSetup. Questo uscirà dal programma di installazione anche prima della visualizzazione della procedura guidata.

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


Se hai bisogno di testare prerequisiti destra prima dell'installazione inizia solo (cioè il InitializeSetup è troppo presto), è possibile chiamare il Abort function dal 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


Anche se per questo scenario, è consigliabile utilizzare il meccanismo PrepareToInstall event function anziché uscire dall'installazione.

function PrepareToInstall(var NeedsRestart: Boolean): String; 
begin 
    Result := ''; 

    if not PrerequisitesTest then 
    begin      
    Result := 'Prerequisites test failed'; 
    end; 
end; 

enter image description here


Se è necessario forzare terminare l'installazione di qualsiasi altro momento, utilizzare la chiamata 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; 

Anche se questo è uscita piuttosto pericoloso, in modo da utilizzare solo come l'ultimo ricorso.

enter image description here


Problemi correlati