使用Linux提取MSI文件


23

相关:如何从MSI包中提取文件?

要使用Linux提取MSI安装程序的内容,我可以使用msiexecwine或use 7zip

但是,后者不会仅保留部分目录和文件名。有没有什么方法可以正确提取MSI文件而无需使用wine


编辑:来说明微软的Infer.NET的问题,这里是文件7zip的产生的列表,并在这里一个MSIEXEC生产(后者是我想要的)


您可以将本文用于Ubuntu,希望对您有所帮助。并尝试Jsmsix.exe
2012年

谢谢,我已经阅读了这篇文章,它不能解决7zip问题(都不能与例如cabextract结合使用)。Jsmsix仍然需要,wine因为您不能本机运行Windows可执行文件。
迈克尔·舒伯特

您面对什么问题7zip可以解释?
2012年

添加了一个示例
Michael Schubert

2
我想做的是为Archlinux创建一个buildscript,对于它来说,设置葡萄酒是一个很大的依赖项,以便能够安装只依赖于mono的东西。
Michael Schubert

Answers:


9

虽然不会立即为您提供帮助,但lessmsi正在使用本机Linux版本。它可以保留您想要的目录结构,因此值得检查一下这是否对您来说是长期的问题。不幸的是,Linux上对.msi的支持似乎很少,因此通过wine进行lessmsi或msiexec可能是您唯一的直接选择,即使(如您所说)wine对提取档案文件的依赖性很大。


的确,这似乎是最好的解决方案,使用wine并等待lessmsi for Linux。
迈克尔·舒伯特

4
仅供参考:在最新版的lessmsi中,我设法将cab提取代码移至libmspack,这是一个可移植的库,也应该在linux上运行。因此,我们最近确实向Linux支持迈出了具体的一步。不久我希望使用可移植的msi lib,它将使所有内容都可移植。
Scott Willeke

-1。Linux版本在很多年后仍然不存在,并且由于存在问题,是否有任何方法可以在不使用wine的情况下正确提取MSI文件,所以这不是答案。sudo apt install msitools如user2834的答案所建议,我改用了msitools包中的msiextract(在Ubuntu中)。
Lissanro Rayen


1

您可以尝试称为cabextract的软件-Ubuntu至少有它的软件包,我希望它也可以从其他流行的发行版中找到。


4
感谢您的提示,但是cabextract甚至没有部分保留文件名和目录(因此它的性能比7zip差)。
Michael Schubert

MSI格式是多层的:在顶层是磁盘映像,数据块散布在.msi文件中。如果解码磁盘映像,则它包含几个文件,包括.cab文件和数据库文件。cabextract在.msi映像中找到CAB文件头,但是由于完整的.cab文件不连续,因此无法提取它。7zip可以先提取磁盘映像,然后提取CAB文件,但是它不知道如何读取数据库文件,数据库文件将CAB文件条目映射到它们的真实安装路径,就像lessmsi一样。
Stuart Caie 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.