2010-12-14 6 views
6

Est-il possible de quitter l'installation à partir d'une fonction dans la section [code] d'un programme d'installation créé avec inno setup?Quitter Inno Setup Installation à partir de [code]

Je ne suis pas intéressé par la définition du code de sortie, ce que je veux faire est d'effectuer une vérification personnalisée pour une exigence, et quitter l'installation si cette exigence n'a pas été précédemment installé.

+1

** Oui, il est possible. ** Espérez-vous que quelqu'un va écrire le code pour vous? Pouvez-vous au moins publier le code que vous avez déjà dans la section '[code']? –

+0

La question a été répondue ici: http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

Répondre

3

Jetez un coup d'œil à InitializeSetup et Abort dans l'aide d'InnoSetup. Comme l'a dit Cody, c'est possible. Si vous rencontrez des problèmes, postez ce que vous avez fait et le problème que vous rencontrez.

0

Quelque part dans votre section de code, vous effectuez une vérification. Droite? À la suite de cette vérification, vous voulez quitter l'installation. Pour effectuer la sortie mettre la ligne:

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

Espérons que cela aide

+0

Cela peut être facilement contourné en utilisant un mode silencieux ('/silent') –

7

La façon dont je le fais est:

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

Et la façon de l'utiliser est:

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

Bien que cela semble fonctionner du point de vue de l'utilisateur, il laisse des fichiers temporaires derrière. – gogowitsch

+0

Cette réponse utilise Wizard.Close qui semble éviter ce problème. http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

+0

Maintenant, si seulement je pouvais supprimer l'invite si l'utilisateur souhaite quitter ... –

10

Vous pouvez utiliser Annuler() si vous êtes dans ces événements:

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

Pour empêcher l'installateur d'exécuter, lorsque le test de pré-requis échoue, juste retour False du InitializeSetup. Cela quittera le programme d'installation avant même que l'assistant affiche.

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


Si vous avez besoin de tester les conditions préalables juste avant l'installation ne démarre que (le InitializeSetup est trop tôt), vous pouvez appeler le Abort function du 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


Bien que pour ce scénario, pensez à utiliser le mécanisme PrepareToInstall event function au lieu de quitter le programme d'installation.

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

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

enter image description here


Si vous devez forcer mettre fin à l'installateur tout autre moment, utilisez l'appel 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; 

Bien que ce soit la sortie plutôt dangereuse, afin de l'utiliser seulement comme approche de dernier recours.

enter image description here


Questions connexes