Extrayendo archivos msi usando Linux


23

Relacionado: ¿Cómo extraer archivos del paquete MSI?

Para extraer el contenido de un instalador MSI usando Linux, puedo usar msiexeccon wine o usar 7zip.

Sin embargo, este último no conserva directorios y nombres de archivos solo en parte. ¿Hay alguna forma de extraer correctamente los archivos MSI sin tener que usar wine?


editar: para ilustrar el problema con Infer.NET de Microsoft, aquí hay una lista de archivos que produce 7zip y aquí uno que produce msiexec (donde este último es lo que quiero)


Puedes usar este artículo para Ubuntu, espero que te ayude. Y también intente Jsmsix.exe .
avirk

Gracias, ya leí el artículo y no resuelve los problemas de 7zip (ni en combinación con, por ejemplo, cabextract). Jsmsix aún requeriría wineporque no puede ejecutar ejecutables de Windows de forma nativa.
Michael Schubert

¿Qué problema te enfrentas 7zippuedes explicar?
avirk

agregó un ejemplo
Michael Schubert,

2
Lo que me gustaría hacer es crear un buildscript para Archlinux, para el cual un vino configurado es una dependencia bastante voluminosa solo para poder instalar algo que debería depender únicamente de mono.
Michael Schubert

Respuestas:


9

Si bien no lo ayudará de inmediato, lessmsi está trabajando en una versión nativa de Linux. Conserva la estructura de directorios como desee, por lo que vale la pena verificar si esto será un problema a largo plazo para usted. Desafortunadamente, el soporte de .msi en Linux parece bastante escaso, por lo que lessmsi o msiexec a través de wine podría ser su única opción inmediata, incluso si (como dijiste) wine es una dependencia bastante pesada para extraer archivos.


De hecho, esa parece ser la mejor solución, usar wine y esperar a lessmsi para Linux.
Michael Schubert

44
FYI: En la última versión de lessmsi, logré mover el código de extracción de la cabina a libmspack, que es una biblioteca portátil que también debería ejecutarse en Linux. Así que recientemente dimos un paso concreto hacia el soporte de Linux. Pronto espero usar un msi lib portátil, que hará que todo sea portátil.
Scott Willeke

-1. La versión de Linux todavía no existe después de muchos años, y dado que la pregunta es si hay alguna forma de extraer correctamente los archivos MSI sin tener que usar wine, esta no es la respuesta. En su lugar, he usado msiextract del paquete msitools ( sudo apt install msitoolsen Ubuntu) como lo recomienda la respuesta del usuario 2834.
Lissanro Rayen

19

Prueba msiextract, https://live.gnome.org/msitools

¡Y abre bichos!


No se encontró un paquete para 14.04 y su construcción también necesita muchas herramientas / libs y habilidades. Renunciar
harry

1
está en debian y ubuntu willy: launchpad.net/ubuntu/+source/msitools . Luego puede simplemente llamar a "msiextract file.msi" y listo, no se necesitan más habilidades.
usuario2834

Funciona aquí y conserva los nombres y las rutas de los archivos. Gracias.
Simon A. Eugster

1

Puede probar un software llamado cabextract : al menos Ubuntu tiene paquetes para él, espero que también se encuentre en otras distribuciones populares.


44
Gracias por la sugerencia, pero cabextract ni siquiera conserva parcialmente los nombres de archivos y directorios (por lo que funciona peor que 7zip).
Michael Schubert

El formato MSI tiene varias capas: en el nivel superior es una imagen de disco, con bloques de datos dispersos por todo el archivo .msi. Si decodifica la imagen del disco, contiene varios archivos, incluido un archivo .cab y archivos de base de datos. cabextract encuentra encabezados de archivos CAB dentro de la imagen .msi, pero como el archivo .cab completo no es contiguo, no puede extraerlo. 7zip puede extraer la imagen del disco y luego el archivo CAB, pero no sabe cómo leer los archivos de la base de datos, que asignan las entradas del archivo CAB a sus verdaderas rutas de instalación, como lo hace lessmsi.
Stuart Caie
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.