Cómo hacer que Inno Setup descomprima un archivo que instaló (todo como parte del proceso de instalación)

Para ahorrar ancho de banda / espacio así como prevenir intromisiones accidentales, los archivos de instalación para un producto de base de datos (llámelo Ajax), se han comprimido (llame a ese archivo “AJAX_Install_Files.ZIP). Me gustaría que Inno-Setup” se instale ” (es decir, copie) el archivo AJAX_Install_Files.ZIP al destino, y luego descomprima los archivos en la misma carpeta donde se encuentra el archivo .ZIP. Inno Setup disparará un progtwig posterior para ejecutar realmente la instalación del producto “Ajax”. “.

He revisado la documentación, las preguntas frecuentes y la KB en el sitio web Inno Setup , y esto no parece posible más que escribir un script Pascal (código): ¿sería correcto o hay alguna solución alternativa?

Puede usar una herramienta de línea de comando externa para descomprimir su archivo, vea aquí por ejemplo. Ponlo en tu sección [Archivos]:

[Files] Source: "UNZIP.EXE"; DestDir: "{tmp}"; Flags: deleteafterinstall 

Luego llámalo en tu sección [Ejecutar], así:

 [Run] Filename: "{tmp}\UNZIP.EXE"; Parameters: "{tmp}\ZipFile.ZIP -d C:\TargetDir" 

(Es probable que desee tomar su directorio de destino de una variable de secuencia de comandos, por lo que hay algo más de trabajo que debe hacerse)

Respondí una pregunta muy similar y algunos de los detalles se aplican.

Me gustaría preguntar por qué necesita un archivo ZIP de los contenidos? Yo personalmente colocaría los archivos sin comprimir en la configuración. Entonces tendría dos entradas de [category] una para la aplicación y otra para los datos. Predeterminado tanto el be checked.

Esto permitiría a los usuarios instalar un nuevo conjunto de datos si fuera necesario en una fecha posterior.

Si realmente quieres un archivo ZIP y quieres que sea fácil, puedes enviar tanto los archivos zip como los descomprimidos en la misma configuración.

Actualizar:

Por defecto, los archivos que se colocan en su setup.exe están comprimidos .

También puede hacer que los archivos se extraigan a una ubicación temporal para que pueda ejecutar su aplicación de instalación y luego eliminarlos.

 [Files] Source: "Install1.SQL"; DestDir: "{tmp}"; Flags:deleteafterinstall; Source: "Install2.SQL"; DestDir: "{tmp}"; Flags:deleteafterinstall; 

Puede usar el método shell Folder.CopyHere para extraer un ZIP.

 const SHCONTCH_NOPROGRESSBOX = 4; SHCONTCH_RESPONDYESTOALL = 16; procedure UnZip(ZipPath, TargetPath: string); var Shell: Variant; ZipFile: Variant; TargetFolder: Variant; begin Shell := CreateOleObject('Shell.Application'); ZipFile := Shell.NameSpace(ZipPath); if VarIsClear(ZipFile) then RaiseException(Format('ZIP file "%s" does not exist or cannot be opened', [ZipPath])); TargetFolder := Shell.NameSpace(TargetPath); if VarIsClear(TargetFolder) then RaiseException(Format('Target path "%s" does not exist', [TargetPath])); TargetFolder.CopyHere(ZipFile.Items, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL); end; 

Tenga en cuenta que las SHCONTCH_NOPROGRESSBOX y SHCONTCH_RESPONDYESTOALL funcionan en Windows Vista y más recientes.


Para ver un ejemplo de extracción de algunos archivos, ver:
¿Cómo obtener Inno Setup para descomprimir un solo archivo?