Extraindo arquivos msi usando Linux

23

Relacionado: Como extrair arquivos do pacote MSI?

Para extrair o conteúdo de um instalador MSI usando Linux, eu posso usar msiexeccom wine ou use 7zip.

No entanto, o último não preserva diretórios e nomes de arquivos apenas em parte. Existe alguma maneira de extrair arquivos MSI corretamente sem precisar usar wine?


edit: para ilustrar o problema com o Infer.NET da Microsoft, aqui está uma lista de arquivos que o 7zip produz e aqui um que o msiexec produz (onde o último é o que eu quero)

Michael Schubert
fonte
Você pode usar este artigo para o Ubuntu, espero que ajude. E também tente Jsmsix.exe .
Avirk 27/05
Obrigado, eu já li o artigo e ele não resolve os problemas do 7zip (nem em combinação com, por exemplo, o cabextract). O Jsmsix ainda exigiria wineporque você não pode executar os executáveis ​​do Windows nativamente.
Michael Schubert
Que problema você está enfrentando, 7zippode explicar?
Avirk 29/05
adicionou um exemplo
Michael Schubert
2
O que eu gostaria de fazer é criar um buildscript para o Archlinux, para o qual um vinho configurado é uma dependência bastante volumosa apenas para poder instalar algo que deve depender apenas do mono.
Michael Schubert

Respostas:

9

Embora não o ajude imediatamente, lessmsi está trabalhando em uma versão nativa do Linux. Ele preserva a estrutura de diretórios como você deseja, portanto vale a pena verificar se isso será um problema de longo prazo para você. Infelizmente, o suporte ao .msi no Linux parece bastante escasso, portanto, lessmsi ou msiexec através do wine pode ser sua única opção imediata, mesmo que (como você disse) o wine seja uma dependência bastante pesada para extrair arquivos.

Chaminé
fonte
Essa, de fato, parece ser a melhor solução, usando wine e aguardando lessmsi para Linux.
22660 Michael Michael Schubert
4
FYI: Na versão mais recente do lessmsi, eu consegui mover o código de extração da cabine para o libmspack, que é uma biblioteca portátil que também deve rodar no linux. Então, demos um passo concreto em direção ao suporte ao linux recentemente. Em breve, espero usar uma msi lib portátil, que tornará tudo portátil.
Scott Willeke
-1. A versão Linux ainda não existe depois de muitos anos e, como a pergunta era: existe alguma maneira de extrair corretamente os arquivos MSI sem precisar usar o wine, essa não é a resposta. Em vez disso, usei o msiextract do pacote msitools ( sudo apt install msitoolsno Ubuntu), conforme recomendado na resposta do usuário2834.
Lissanro Rayen
19

Experimente o msiextract, https://live.gnome.org/msitools

E abra bugs!

user2834
fonte
Não foi encontrado nenhum pacote para o 14.04, e para construí-lo também são necessárias muitas ferramentas / bibliotecas e habilidades. Desistindo
harry
11
está no debian e no ubuntu willy: launchpad.net/ubuntu/+source/msitools . Você pode simplesmente chamar "msiextract file.msi" e pronto, não são necessárias mais habilidades.
user2834
Funciona aqui e preserva nomes e caminhos de arquivos. Obrigado.
Simon A. Eugster
1

Você pode experimentar um software chamado cabextract - pelo menos o Ubuntu tem pacotes para isso, espero que seja encontrado em outras distribuições populares também.

Unksi
fonte
4
Obrigado pela dica, mas o cabextract nem sequer conserva parcialmente os nomes de arquivos e diretórios (portanto, o desempenho é inferior a 7zip).
Michael Schubert
O formato MSI é de várias camadas: no nível superior, é uma imagem de disco, com blocos de dados espalhados por todo o arquivo .msi. Se você decodificar a imagem do disco, ela conterá vários arquivos, incluindo um arquivo .cab e arquivos de banco de dados. O cabextract localiza os cabeçalhos de arquivo CAB na imagem .msi, mas como o arquivo .cab completo não é contíguo, não pode ser extraído. O 7zip pode extrair a imagem do disco e, em seguida, o arquivo CAB, mas não sabe ler os arquivos do banco de dados, que mapeiam as entradas do arquivo CAB para seus verdadeiros caminhos de instalação, como lessmsi faz.
Stuart Caie