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.

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top