2009-05-22 9 views
1

J'utilise Inno setup pour installer un de mes produits, dans la configuration j'exécute un programme externe (Validator.exe) si ce programme est annulé ou abandonné Je dois annuler mon propre programme d'installation. Je sauvegarde le Validator.exe dans {app} path et l'exécute.Comment annuler le programme d'installation avec Inno Setup?

Lorsque le programme d'installation est en cours d'exécution que j'appelle fichier Validator.exe et je reçois le résultat de l'exécution avec: Exec (ExpandConstant ({app} /Validator.exe '), '', '', SW_SHOW, ewWaitUntilTerminated , ResultCode).

Mais ce sont les problèmes avec toutes les solutions que j'ai essayé:

InitializeSetup: Le fichier Validator.exe n'est pas copié dans {app} encore, il ne sera jamais exécutée. Abort: ne peut être appelé que dans (InitializeSetup, InitializeWizard, CurStepChanged (ssInstall)). Dans ces cas, le Validator n'est pas encore copié. DeinitializeSetup: Je peux exécuter Validator.exe après l'installation mais je ne peux pas abandonner mon installateur à partir de ce point.

J'ai besoin d'un moyen d'annuler l'installation après Validator.exe a été copié et exécuté, peut-être appeler désinstaller mais je ne pouvais pas le faire.

Merci pour toute aide.

Répondre

2

Dans Inno Setup, un fichier "externe" est un fichier et non inclus dans le fichier EXE du programme d'installation. Il existe en externe, vraisemblablement inclus dans un fichier séparé avec le fichier EXE du programme d'installation. Vous dites que la raison pour laquelle vous n'appelez pas Abort au sein de l'événement InitializeSetup est que le programme de validation n'a pas encore été copié dans le répertoire {app}, ce qui est compréhensible puisque à ce stade, l'utilisateur n'a pas encore spécifié la destination de l'installation. Mais vous n'avez pas besoin que le validateur soit dans le répertoire de destination. C'est déjà un fichier externe, il suffit donc de l'exécuter à partir du répertoire dans lequel il est déjà.

Une autre possibilité consiste à mettre la fonctionnalité de validation requise dans une DLL. Vous pouvez inclure la DLL dans le programme d'installation et Inno Setup extrait la DLL dans un emplacement temporaire afin que vous puissiez appeler ses fonctions à partir du script d'installation.

2

Merci, cela fonctionne très bien. Voici comment je l'ai réparé:

function InitializeSetup(): Boolean;. 
var 
    ResultCode : Integer; 
begin 
    Result := True; 
    ExtractTemporaryFile('Validator.exe'); 

    if Exec(ExpandConstant('{tmp}\Validator.exe'), '', '', SW_SHOW, 
    ewWaitUntilTerminated, ResultCode) 
    then begin 
    if not (ResultCode = 0) then begin 
     Result := false; 
    end; 
    end; 
end;