Extraire des fichiers msi sous Linux

23

Connexe: Comment extraire des fichiers du package MSI?

Pour extraire le contenu d'un programme d'installation MSI sous Linux, je peux soit utiliser msiexecavec wine, soit utiliser 7zip.

Cependant, ce dernier ne conserve que partiellement les répertoires et les noms de fichiers. Existe-t-il un moyen d'extraire correctement les fichiers MSI sans avoir à utiliser wine?


edit: pour illustrer le problème avec Infer.NET de Microsoft, voici une liste des fichiers que 7zip produit et ici celui que msiexec produit (où ce dernier est ce que je veux)

Michael Schubert
la source
Vous pouvez utiliser cet article pour Ubuntu en espérant qu'il vous aidera. Et essayez également Jsmsix.exe .
avirk
Merci, j'ai déjà lu l'article et il ne résout pas les problèmes de 7zip (ni en combinaison avec par exemple cabextract). Jsmsix nécessiterait toujours winecar vous ne pouvez pas exécuter les exécutables Windows en mode natif.
Michael Schubert
Quel problème rencontrez 7zip-vous pouvez-vous expliquer?
avirk
a ajouté un exemple
Michael Schubert
2
Ce que je voudrais faire, c'est créer un buildscript pour Archlinux, pour lequel un set up wine est une dépendance assez volumineuse juste pour pouvoir installer quelque chose qui devrait dépendre uniquement de mono.
Michael Schubert

Réponses:

9

Bien que cela ne vous aide pas immédiatement, lessmsi travaille sur une version native de Linux. Il préserve la structure du répertoire comme vous le souhaitez, il vaut donc la peine de vérifier si cela va être un problème à long terme pour vous. Malheureusement, la prise en charge de .msi sous Linux semble assez clairsemée, donc lessmsi ou msiexec via wine pourrait être votre seule option immédiate, même si (comme vous l'avez dit) wine est une dépendance assez lourde pour l'extraction d'archives.

ChimneyImp
la source
Cela semble en effet être la meilleure solution, en utilisant wine et en attendant lessmsi pour Linux.
Michael Schubert
4
FYI: Dans la dernière version de lessmsi, j'ai réussi à déplacer le code d'extraction de cab vers libmspack qui est une bibliothèque portable qui devrait également fonctionner sur Linux. Nous avons donc fait un pas concret vers le support Linux récemment. J'espère bientôt utiliser une bibliothèque msi portable, qui rendra tout portable.
Scott Willeke
-1. La version Linux n'existe toujours pas après de nombreuses années, et comme la question était de savoir comment extraire correctement les fichiers MSI sans avoir à utiliser wine, ce n'est pas la réponse. J'ai utilisé à la place msiextract du paquet msitools ( sudo apt install msitoolsdans Ubuntu) comme recommandé dans la réponse de user2834.
Lissanro Rayen
19

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

Et ouvrez les bugs!

user2834
la source
Aucun package n'a été trouvé pour la version 14.04 et sa construction nécessite également de nombreux outils / bibliothèques et compétences. Abandonner
Harry
1
c'est dans debian, et ubuntu willy: launchpad.net/ubuntu/+source/msitools . Vous pouvez alors simplement appeler "msiextract file.msi" et c'est tout, plus de compétences nécessaires.
user2834
Fonctionne ici et préserve les noms de fichiers et les chemins d'accès. Merci.
Simon A. Eugster
1

Vous pouvez essayer un logiciel appelé cabextract - au moins Ubuntu a des packages pour cela, je m'attendrais à ce qu'il soit également trouvé dans d'autres distributions populaires.

Unksi
la source
4
Merci pour cet indice, mais cabextract ne conserve même pas partiellement les noms de fichiers et les répertoires (il fonctionne donc moins bien que 7zip).
Michael Schubert
Le format MSI est composé de plusieurs couches: au niveau supérieur, c'est une image disque, avec des blocs de données dispersés tout autour du fichier .msi. Si vous décodez l'image disque, elle contient plusieurs fichiers, dont un fichier .cab et des fichiers de base de données. cabextract trouve des en-têtes de fichier CAB à l'intérieur de l'image .msi, mais comme le fichier .cab complet n'est pas contigu, il ne peut pas l'extraire. 7zip peut extraire l'image du disque puis le fichier CAB, mais il ne sait pas lire les fichiers de base de données, qui mappent les entrées du fichier CAB à leurs vrais chemins d'installation, comme le fait lessmsi.
Stuart Caie