Cómo cancelar instalador usando Inno Setup?
-
23-08-2019 - |
Pregunta
Estoy utilizando la disposición de Inno para instalar un producto de la mina, en la configuración ejecuto un programa externo (Validator.exe) si este programa es cancelado o abortado tengo que cancelar mi propio instalador.
ahorro el Validator.exe en {app} ruta y el ejecutarlo.
Cuando el instalador se está ejecutando llamo archivo Validator.exe y consigo el resultado de la ejecución con: Exec (ExpandConstant ( '{app} /Validator.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode).
Pero esto son los problemas con todas las soluciones que he intentado:
InitializeSetup:. El archivo Validator.exe no se copia en {app}, sin embargo, por lo que nunca se ejecutará
Abortar:. Se puede llamar sólo en (InitializeSetup, InitializeWizard, CurStepChanged (ssInstall)) por lo que en estos casos el validador no se copia sin embargo
DeinitializeSetup:. Puedo ejecutar Validator.exe después de la instalación, pero no puedo abortar el mi instalador desde este punto
Necesito un poco de forma de cancelar la instalación después de Validator.exe ha sido copiado y ejecutado, tal vez llamar desinstalación pero no podía hacerlo.
Gracias por cualquier ayuda.
Solución
Usted podría simplemente utilizar el ExtractTemporaryFile () función auxiliar para extraer validator.exe en cualquier paso de la instalación anterior. Ver la configuración cuestión Inno extraer archivos en la configuración de inicio en lugar de al final y mi respuesta a la misma.
Otros consejos
En la disposición de Inno, un archivo "externo" es uno que es no incluido en el archivo de instalación EXE. Existe el exterior, presumiblemente incluye como un archivo separado con el archivo de instalación EXE. Usted dice que su razón para no llamar Abort
dentro del evento InitializeSetup
es que el programa de validación aún no se ha copiado en el directorio {app}
, lo cual es comprensible ya que en ese momento, el usuario aún no ha especificado cuál debería ser el destino de la instalación. Pero no es necesario el validador sea estar en el directorio de destino. Ya es un archivo externo, por lo que sólo tiene que ejecutar desde cualquier directorio que ya está.
Otra posibilidad es poner la funcionalidad de validación requerida en un archivo DLL. Puede incluir la DLL en el instalador, y la disposición de Inno va a extraer el archivo DLL en una ubicación temporal para que pueda llamar a sus funciones desde el script de instalación.
Gracias funciona excelente. Así es como me fijo:
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;