Extraer mediante programación el contenido de InstallShield setup.exe


Estoy tratando de extraer el contenido del archivo de una instalación de InstallShield.exe-file. (Mi plan es usarlo en una herramienta de back-office, por lo que esto debe hacerse programáticamente sin ninguna interacción del usuario.)

Es esto posible?
(La investigación inicial parece indicar que fallará.)

Si es posible tener una solución genérica, para todas las versiones recientes de InstallShield sería lo mejor.
De lo contrario, si una solución solo funciona para algunas versiones de InstallShield, sería un paso en camino. (Probablemente sería posible deducir cuál es la versión a setup.exe de InstallShield mirando los recursos de versión del archivo exe.

Encontré que algunas versiones de InstallShield soportan /b o /extract_all. Sin embargo, no hay una buena manera de saberlo, simplemente lanzar el exe y esperar que extraiga y termine ordenadamente en lugar de mostrar diálogos GUI no parece una buena solución. Por lo tanto, estoy buscando una forma más estable.
Ideas bienvenidas.

Author: leiflundgren, 2011-12-30

5 answers

No hay una forma compatible de hacer esto, pero ¿no tendrá que examinar los archivos relacionados con cada instalador para averiguar cómo instalarlos realmente después de extraerlos? Suponiendo que pueda pasar el tiempo para averiguar qué línea de comandos se aplica, aquí hay algunos parámetros candidatos que normalmente le permiten extraer una instalación.

Basado en MSI (puede no resultar en una imagen utilizable para una instalación InstallScript MSI):

  • setup.exe /a /s /v"/qn TARGETDIR=\"choose-a-location\""

    O, para extraer también requisitos previos (para las versiones en las que funciona),

  • setup.exe /a"choose-another-location" /s /v"/qn TARGETDIR=\"choose-a-location\""

Basado en InstallScript:

  • setup.exe /s /extract_all

Basado en suite (puede no ser obvio cómo instalar los archivos resultantes):

  • setup.exe /silent /stage_only ISRootStagePath="choose-a-location"
 32
Author: Michael Urman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-01 16:41:41

Http://www.compdigitec.com/labs/files/isxunpack.exe

Uso: isxunpack.exe su escudo de instalación.exe

Se extraerá en la misma carpeta.

 8
Author: Motes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-30 17:17:06

Comienza con:

setup.exe /?

Y debería ver una ventana emergente con algunas opciones mostradas.

 4
Author: Garen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-24 21:17:20

En Linux existe unshield, que funcionó bien para mí (incluso si la GUI incluye elementos de disuasión personalizados como indicaciones de clave de licencia). Está incluido en los repositorios de todas las distribuciones principales (basadas en arch, suse, debian y fedora) y su fuente está disponible en https://github.com/twogood/unshield

 3
Author: stefanct,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-21 15:09:42

El programa libre y de código abierto llamado cabextract listará y extraerá el contenido de not just .archivos cab, pero también los archivos de Macrovision:

% cabextract /tmp/QLWREL.EXE
Extracting cabinet: /tmp/QLWREL.EXE
  extracting ikernel.dll
  extracting IsProBENT.tlb
  ....
  extracting IScript.dll
  extracting iKernel.rgs

All done, no errors.
 1
Author: Mikhail T.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-24 07:39:06