如何从 MSI 包中提取文件?

Mar*_*tin 209 compression windows-installer installation

我们有一些旧补丁,我们想从中获取文件,但不想花时间将它们安装到机器上。

谁能建议一种从MSI安装包中提取文件的方法?

小智 240

首先,要访问命令提示符,请执行以下操作:

  1. 单击开始按钮。

  2. 单击所有程序。

  3. 进入配件。

  4. 左键单击命令提示符。

获得命令提示符后,输入以下内容:

msiexec /a drive:\filepath\to\MSI\file /qb TARGETDIR=drive:\filepath\to\target\folder
Run Code Online (Sandbox Code Playgroud)

使用所需的位置来填充上述文件路径。例子:

msiexec /a c:\testfile.msi /qb TARGETDIR=c:\temp\test
Run Code Online (Sandbox Code Playgroud)

  • 我在一台锁定的 Win8.1 计算机(工作笔记本电脑)上运行它,应该注意***不需要管理员权限***来提取`.msi`文件。 (20认同)
  • @ user6738 我已经测试过了,它没有安装软件。该软件既未在 appwiz 中找到,也无法通过 msi 卸载并报告未安装。它真正从我的测试中提取文件。 (8认同)
  • 很好的答案!我把它放到一个 `extractMSI.cmd` 文件中: `msiexec /a %1 /qb TARGETDIR="%~d1%~p1%~n1" || pause` 并将其添加到 msi 文件的“打开方式...”选项 (7认同)
  • 另一个快速的谷歌发现了这个:http://www.legroom.net/software/uniextract 我更喜欢使用内置插件,但它看起来像是一个可以接受的实用程序。 (5认同)
  • 据我了解(来自 msiexec /?),此命令实际上会将程序安装到该位置;我不认为这是原始请求者的想法。 (5认同)
  • 对 google 的引用是......很陈旧,因为 google 把我带到这里作为我搜索的第一次命中 (2认同)

She*_*har 82

使用7Zip
它将为您解压 MSI、CAB、一些 EXE 和更多包。也不需要管理员权限来运行它。

-编辑-

而且它是开源的,所以没有烦人的消息乞求你买东西

  • 尝试之后,msiexec 做得更好(保留目录,正确命名文件等) (18认同)
  • 我看到很多东西前面都有感叹号而不是实际文件。我想要么有些东西发生了变化,要么我有一个奇怪的 msi 文件。我尝试了 7-Zip 9.20。 (8认同)

Sco*_*eke 49

还有lessmsi,它是完全免费和开源的。

没有广告或烦人的消息,它将正确保留目录结构和文件名,具有复杂的命令行界面,以及允许浏览文件以及查看内部 MSI 表和其他 MSI 属性的图形用户界面。

  • 谢谢!这个帮助我从一个 MSI 中提取,该 MSI 不会使用 msiexec 命令提取 <安装包名称> 说“不支持管理员安装” (7认同)

Ste*_*mul 27

内置 MSI 支持文件提取(管理员安装)

MSI或 Windows 安装程序对此具有内置支持- 从 MSI 文件中提取文件。这称为管理安装。它基本上旨在作为一种创建网络安装点的方法,从该安装点可以在许多目标计算机上运行。这可确保源文件始终可用于任何修复操作。

请注意,运行管理员安装与使用 zip 工具提取文件是非常不同的!后者不会调整媒体表的媒体布局,以便将包设置为使用外部源文件——这是正确的方法。总是更喜欢在任何 hacky zip 提取上运行实际的管理员安装。至于压缩,实际上有三种不同的压缩算法用于 MSI 文件格式中的 cab 文件:MSZip、LZX 和存储(未压缩)。所有这些都可以通过管理员安装正确处理。


管理员安装有很多用途

建议阅读更多关于 admin-installs 的信息,因为它是一个有用的概念,我在 stackoverflow 上写过一篇文章:使用 msiexec /a 启动管理安装的目的是什么?.

本质上,管理员安装对于以下方面很重要:

  • 提取和检查安装程序文件
  • 通过系统管理软件部署,例如SCCM(避免在 C:\Windows\Installer 中缓存巨大的 MSI 文件,因为文件是从内部 cab 中提取的)
  • 企业应用重新打包
  • 修理、修改和自我修理操作
  • 修补和升级
  • MSI 广告(“从源代码运行”功能)
  • 许多其他较小的细节

请阅读上面链接的stackoverflow帖子以获取更多详细信息。对于系统管理员应用程序打包人员安装开发人员发布经理甚至普通用户来说,查看他们正在安装的内容等是一个非常重要的概念......


管理员安装,实用的操作方法

您可以通过几种不同的方式执行管理员安装,具体取决于安装程序的交付方式。本质上,它要么作为MSI 文件提供,要么包装在setup.exe 文件中

提升的命令提示符运行这些命令,并按照交互式命令行的 GUI 中的说明进行操作:

一个SETUP.EXE文件,也可以是一个传统风格的设置(非MSI)或可怕的InstallScript MSI文件类型-一个众所周知的越野车Installshield的项目类型与混合非符合标准的MSI格式。它本质上是一个带有自定义的、更高级的 GUI 的 MSI,但它也充满了错误。

对于旧版 setup.exe 文件/a将不执行任何操作,但您可以尝试使用/extract_all:[path] 开关,本 pdf 中所述。它也是静默安装和其他事情的一个很好的参考。另一个资源是Installshield setup.exe 命令行参数列表

MSI 补丁文件(*.MSP) 可应用于管理映像以正确提取其文件。7Zip 也可以解压缩文件,但它们的格式不正确。

最后,如果没有其他方法可行,您可以通过清除系统上的临时文件夹来获取提取的安装文件,以交互方式启动 setup.exe,然后等待第一个对话框出现。在大多数情况下,安装程序会将一堆文件解压缩到临时文件夹中。有时文件是普通文件,有时是 CAB 格式,但 Winzip、7Zip 甚至 Universal Extractor(尚未测试此产品)- 可能能够打开这些文件。


Mic*_*ick 8

我会建议UniExtract制作neoice的解决方案更容易。它做同样的事情,只是更加自动化,并允许使用多种方法来提取 MSI 文件,而不仅仅是管理安装(正如他的解决方案所使用的那样)。

UniExtract 还可以处理与 WISE 或 InstallShield 一起打包的 exe,以及各种其他压缩格式。哦,它是免费的。

Universal Extractor 是一个完全符合它所说的程序:从任何类型的存档中提取文件,无论是简单的 zip 文件、安装程序,还是 Windows Installer (.msi) 包。


Chr*_*phe 6

如果您添加这些注册表项,当您右键单击 MSI 文件时,您将看到一个选项“在此处提取”:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\Msi.Package\shell\ExtractHere]
@="Extract here"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Msi.Package\shell\ExtractHere\command]
@="msiexec.exe /a \"%1\" TARGETDIR=\"%1_extracted\" /qb"
Run Code Online (Sandbox Code Playgroud)

将内容保存在记事本文件中,将扩展名“.txt”重命名为“.reg”,然后双击该文件以将注册表项添加到注册表中