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)


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.


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!


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.