¿Es posible ejecutar un archivo después de la extracción de un archivo de 7-Zip autoextraíble (SFX)?

40

Estoy tratando de hacer una aplicación comprimible que pueda implementarse.

Actualmente estoy tomando un conjunto de archivos que publiqué desde mi IDE (Visual Studio 2008 - aplicación publicada de WPF) y comprimiéndolos en un archivo SFX de 7 Zip.

Mis usuarios me han preguntado si pueden "instalar con un clic" desde el 7-Zip exe. Hay una lista de parámetros cuando estoy creando el archivo. ¿Hay alguna manera de establecer algún tipo de combinación de parámetros para invocar el ejecutable del instalador que se extrae?

Lamentablemente, la documentación de 7-Zip no parece cubrir este escenario. He visto varias aplicaciones pagas que hacen algo similar a esto, pero estoy tratando de mantener la herramienta que estoy escribiendo libre de código con licencia para que podamos usarla internamente.

Mike G
fuente
¿Podría señalar a alguno pagado?
abhishek77in

Respuestas:

35

Deberá descargar el SDK de LMZA desde 7-Zip . El archivo "installer.txt" contiene documentación:

7zSD.sfx es un módulo SFX para instaladores. 7zSD.sfx usa msvcrt.dll.

Los módulos SFX para instaladores permiten crear un programa de instalación. Dicho módulo extrae el archivo a la carpeta temporal y luego ejecuta el programa especificado y elimina los archivos temporales después de finalizar el programa. El archivo de extracción automática para los instaladores debe crearse como uniendo 3 archivos: SFX_Module, Installer_Config, 7z_Archive. Installer_Config es un archivo opcional. Puede usar el siguiente comando para crear un archivo autoextraíble del instalador:

copy /b 7zSD.sfx + config.txt + archive.7z archive.exe

Necesita crear un archivo config.txt.

El archivo de configuración contiene comandos para el instalador. El archivo comienza desde la cadena ;!@Install@!UTF-8!y termina con ;!@InstallEnd@!. El archivo debe estar escrito en codificación UTF-8. El archivo contiene pares de cadenas:

ID_String = "Valor"

Title Título para mensajes

BeginPrompt Comenzar mensaje de aviso

ProgressEl valor puede ser "sí" o "no". El valor predeterminado es "sí".

RunProgramComando para ejecutar. El valor predeterminado es "setup.exe". La subcadena %% T se reemplazará con la ruta a la carpeta temporal, donde se extrajeron los archivos

DirectoryPrefijo de directorio para "RunProgram". El valor predeterminado es ". \"

ExecuteFile Nombre del archivo para ejecutar

ExecuteParameters Parámetros para "ExecuteFile"

Por ejemplo:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!
Jason
fuente
1
sí. Lo he intentado Un poco incómodo porque todo es línea de comando, pero encontrará buena documentación para ello. Y obtengo la mejor compresión disponible de forma gratuita.
Ganesh R.
@MikeG: ese enlace es mucho más completo. Explicó cómo hacer que la porción de descompresión sea completamente transparente. ¡Muy bien, gracias!
namuol
55
Tenga en cuenta que los "módulos SFX se movieron al paquete LZMA SDK" (disponible en 7-zip.org ) a partir de la versión 9.35 beta.
Lukas
21

La solución acordada es correcta, pero en realidad no ayuda a explicar lo que realmente necesita hacer. Leí esta y muchas otras soluciones y no pude encontrar instrucciones simples completas y completas sobre cómo hacer esto.

Si está confundido como estaba, lea mi publicación de blog que proporciona instrucciones paso a paso sobre cómo lograr lo que Molly7244 ha publicado.

Cómo hacer un archivo autoextraíble que ejecute tu setup.exe con el interruptor 7zip -sfx

Me llamaron la atención que los enlaces pueden quedar muertos, así que aquí están los pasos de mi blog.

Paso 1 - Configura tu carpeta de instalación

Para facilitar esto, cree una carpeta c: \ Instalar. Aquí es donde copiaremos todos los archivos requeridos.

Paso 2 - 7 Comprime tus instaladores

  1. Vaya a la carpeta que tiene su .msi y su setup.exe
  2. Seleccione ambos .msi y setup.exe
  3. Haga clic derecho y elija 7Zip -> "Agregar al archivo"
  4. Nombra tu archivo "Installer.7z" (o el nombre que elijas)
  5. Haga clic en Aceptar
  6. Ahora debería tener "Installer.7z".
  7. Copie este archivo .7z en su directorio c: \ Install

Paso 3: obtenga el módulo de extensión szx 7z-Extra

Necesita descargar el 7z-Extra.

  1. Sigue este enlace para descargar 7Zip
  2. Debe descargar la versión 9.20 (como @ mayo-2015) ya que la versión beta no contiene los archivos correctos.
  3. Un enlace de descarga directa .
  4. Extraiga los archivos adicionales de 7zip
  5. Copie el archivo "7zS.sfx" en c: \ Install

Paso 4 - Configura tu config.txt

Recomendaría usar NotePad ++ para editar este archivo de texto, ya que necesitará codificar en UTF-8, las siguientes instrucciones están usando notepad ++.

  1. Usando Windows Explorer vaya a c: \ Instalar
  2. haga clic derecho y elija "Nuevo archivo de texto" y asígnele el nombre config.txt
  3. haga clic derecho y elija "Editar con NotePad ++
  4. Haga clic en el "Menú de codificación" y elija "Codificar en UTF-8"
  5. Ingrese algo como esto:

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Do you want to install SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!
    

Edite esto reemplazando [SOFTWARE v1.0.0.0] con el nombre de su producto. Las notas sobre los parámetros y opciones para el archivo de configuración están aquí

Control

Ahora debería tener una carpeta "c: \ Install" con los siguientes 3 archivos:

  1. Instalador.7z
  2. 7zS.sfx
  3. config.txt

Paso 5 - Crea el archivo

Estas instrucciones las encontré en la web pero en ninguna parte explicaron ninguno de los 4 pasos anteriores.

  1. Abra una ventana cmd, Window + R -> cmd -> presione enter
  2. En la ventana de comandos, escriba lo siguiente

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Mire en c: \ Install y ahora verá que tiene un MyInstaller.exe

  4. Has terminado

Ejecuta el instalador

Haga doble clic en MyInstaller.exe y se le mostrará su mensaje. Haga clic en Aceptar y se ejecutará el archivo setup.exe.

Nota de PS sobre automatización

Ahora que tiene esto funcionando en su directorio c: \ Install, crearía un archivo "Install.bat" y pondría el script de copia.

copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe

Ahora puede editar y ejecutar Install.bat cada vez que necesite reconstruir una nueva versión de su paquete de implementación.

jcrawfor74
fuente
2
¡Esta debería ser la respuesta aceptada!
noelicus
¿Es posible pasar una línea de comando arg al ExecuteParameterselemento en config.txt? Por ejemplo: C:\Install\MyInstaller.exe some_file.txt se ejecutaría setup.exe some_file.txt.
Dthor
Sí lo es. Como matthew-lundberg dijo en su respuesta , "Los argumentos pasados ​​al ejecutable SFX se pasan al script Install.cmd"
dthor
8

También deberías mirar NSIS . Con él, puede crear un instalador que se comprima con el mismo método que utiliza 7-Zip ( LZMA ), por lo que debe ser aproximadamente del mismo tamaño y tener control total sobre el proceso de instalación.

Matthew Talbert
fuente
2

Sobre la base de la respuesta de jcrawfor74, aquí hay información adicional:

En lugar de 7zS.sfx , también puede usar el archivo 7zS2.sfx . Esta es una versión mucho más pequeña (28 kB frente a 140 kB) pero no es compatible con el archivo config.txt. Entonces puede dejarlo fuera en el comando copiar. Si solo desea crear pequeños scripts de configuración, esto le permite crear archivos EXE más pequeños.

El módulo SFX más pequeño no hace preguntas. Extrae los archivos a una carpeta temporal como el otro módulo, y luego encuentra candidatos ejecutables. De acuerdo con el código fuente (también disponible en la página de descargas), en C \ Util \ SfxSetup \ SfxSetup.c, pesa los archivos de manera diferente según su nombre y extensión y luego elige el archivo con la puntuación más alta.

Ambos módulos SFX se ejecutan automáticamente como administrador , al menos en Windows 10, y esto no se puede configurar. Si bien este comportamiento puede ser deseable para configuraciones de todo el sistema, este no siempre es el caso. Además, esta decisión solo se basa en los datos de la versión del archivo porque no se incluye ningún manifiesto que explícitamente le indique a Windows qué hacer. La compatibilidad de Windows mira el archivo y encuentra cadenas como "Configuración" que conducen a la solicitud de elevación.

Si necesita un módulo SFX que no solicite permisos de administrador, puede reconstruir el módulo SFX desde el origen o, más simple, editar la información de la versión del archivo con un editor de recursos como este . Simplemente elimine la palabra "Setup" del campo FileDescription, en el caso del mencionado Resource Hacker compile el archivo y guarde el archivo EXE. También puede realizar este paso en el archivo 7zS.sfx o 7zS2.sfx directamente y guardarlo en algún lugar para que pueda usarlo para crear paquetes SFX no elevados. Y puede usar esto para personalizar completamente la información de la versión del archivo para poner el nombre de su producto o cualquier cosa que describa la carga útil.

ygoe
fuente