2010-12-14 17 views
6

¿Es posible salir de la instalación desde una función en la sección [code] de un instalador creado con inno setup?Salir de Inno Setup Instalación desde [código]

No estoy interesado en configurar el código de salida, lo que quiero hacer es realizar una comprobación personalizada de un requisito y salir de la instalación si ese requisito no se instaló previamente.

+1

** Sí, es posible. ** ¿Usted está esperando que alguien va a escribir el código para usted? ¿Puedes al menos publicar el código que ya tienes en la sección '[código']? –

+0

La pregunta fue respondida aquí: http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

Respuesta

3

Eche un vistazo a InitializeSetup y Abort en la ayuda de InnoSetup. Como dijo Cody, es posible. Si tiene problemas, publique lo que ha hecho y el problema que está teniendo.

0

En algún lugar de la sección del código, se realiza un control. ¿Derecha? Como resultado de esa comprobación, desea salir de la instalación. Para llevar a cabo la salida de poner la línea:

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

Esperemos que esto ayuda

+0

Esto puede ser pasado por alto fácilmente usando un modo silencioso ('/silent') –

7

La manera de hacerlo es:

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

Y la manera de utilizarlo es:

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

Si bien esto parece funcionar desde la perspectiva del usuario, deja archivos temporales atrás. – gogowitsch

+0

Esta respuesta utiliza Wizard.Close que parece evitar este problema. http://stackoverflow.com/questions/6345920/inno-setup-how-to-abort-terminate-setup-during-install – 010110110101

+0

Ahora, si solo pudiera suprimir el mensaje si el usuario desea salir ... –

10

Puede usar Anular() si se encuentra en estos eventos:

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

Para evitar que el instalador se ejecuta, cuando la prueba falla requisitos previos, simplemente volver False del InitializeSetup. Esto saldrá del instalador incluso antes de que se muestre el asistente.

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 necesita probar requisitos previos justo antes de la instalación se inicia solamente (es decir, el InitializeSetup es demasiado pronto), puede llamar a la Abort function del 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


A pesar de este escenario, puede utilizar el mecanismo de PrepareToInstall event function, en lugar de salir de la configuración.

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

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

enter image description here


Si necesita forzar terminar la instalación de cualquier otro momento, utilice la llamada 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; 

Aunque esta es la salida más segura, a fin de utilizarlo solo como el enfoque de último recurso.

enter image description here


Cuestiones relacionadas