2011-07-25 9 views
8

Actualmente mi archivo por lotes está en la sección [Ejecutar]. Necesito que se ejecute mi archivo por lotes antes de la sección [Archivos]. ¿Hay alguna manera de hacer esto en Inno Setup? Actualmente, la sección [Ejecutar] siempre se ejecuta después de la sección [Archivos].Inno Setup Ejecutar un archivo por lotes antes de la sección [Archivos]

[Run] 
Filename: "C:\Users\Scripts\Install\Install.bat"; Parameters: {code:GetDatabaseName} 

[Files] 
Source: "C:\Users\MyApp\*"; DestDir: "\\MyServer\MyApp"; Flags: recursesubdirs createallsubdirs 

Respuesta

11

Si es necesario hacerlo al comienzo de la configuración, use Exec() en las funciones de evento PrepareToInstall() o CurStepChanged(ssInstall). Ambos son después de que el usuario haya dicho "adelante, instale" pero antes que nada. PrepareToInstall() también le permite cancelar la instalación con una advertencia.

Si el archivo necesita ser extraído de la primera configuración, a continuación, puede preceder con gran respuesta ExtractTemporaryFile()

+0

+1 y gracias por la sugerencia, intentaremos esa ruta. – odez213

5

Puede utilizar el evento InitializeSetup + algunas secuencias de comandos Pascal.

See; How to run a file before setup with Inno Setup

No se menciona en ese ejemplo; para obtener el archivo del instalador, debería usar ExtractTemporaryFile('your.bat') y luego Exec(ExpandConstant('{tmp}\your.bat ... para ejecutarlo.

+0

lo necesitaba después de la instalación, ya que tendrá que tomar el valor de entrada del usuario. – odez213

+0

+1 para la sugerencia – odez213

4

Continua de Deanna, ejemplo de código:

[code] 
function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
    ResultCode: integer; 
begin 
    Exec(ExpandConstant('{app}\serviceDeployment\unInstallService.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) 
end; 

este código siempre devuelve una cadena vacía, que le dice a la configuración que continúe. En caso de que quiera detener la configuración (en algunos casos de error), debe devolver una cadena que no esté vacía y se mostrará al usuario (y la instalación se detendrá).

Con el fin de devolver una cadena de error añadir esta línea en PrepareToInstall de:

Result := 'Your Error Description'; 
+0

Bueno, entonces sería justo mostrar cómo manejar el error cuando 'Exec' falla, o cuando el objetivo ejecutado devuelve un error (en este caso, un script por lotes que devuelve cierto' ERRORLEVEL'). – TLama

+0

Exec es booleano. para que pueda verificar si es verdadero o falso. y ResultCode contiene el código de error. si no Exec (.........) then begin Resultado: = 'Su descripción del error'; final – Danielle

Cuestiones relacionadas