63

我想提取 EXE 设置的 MSI 以通过网络发布。

例如,使用 Universal Extractor,但它不适用于 Java 运行时环境。

4

8 回答 8

99

对于基于 InstallShield MSI 的项目,我发现以下工作:

setup.exe /s /x /b"C:\FolderInWhichMSIWillBeExtracted" /v"/qn"

此命令将导致在您可以自由指定的目录中提取 MSI,并以静默方式卸载产品失败。

命令行基本上告诉 setup.exe 尝试卸载产品 (/x) 并静默执行 (/s)。这样做时,它应该将 MSI 提取到特定位置 (/b)。

/v 命令将参数传递给 Windows Installer,在本例中为 /qn 参数。/qn 参数禁用安装程序的任何 GUI 输出。

于 2014-06-04T09:35:14.930 回答
61

快速列表:有许多常见的setup.exe文件类型。以下是“短名单”中的一些。这里有更多充实的细节 (接近底部)。

Setup.exe 提取:(尝试各种口味)

setup.exe /a
setup.exe /s /extract_all
setup.exe /s /extract_all:[path]
setup.exe /stage_only
setup.exe /extract "C:\My work"
setup.exe /x
setup.exe /x [path]
setup.exe /s /x /b"C:\FolderInWhichMSIWillBeExtracted" /v"/qn"

dark.exe -x outputfolder setup.exe

dark.exe是一个 WiX 二进制文件 -安装 WiX以提取 WiX setup.exe(截至目前)。更多(第 4 节)。

总有:

setup.exe /?

MSI 提取: msiexec.exe /File.msi提取:

 msiexec /a File.msi
 msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn

许多设置工具:不可能涵盖所有不同类型的可能setup.exe文件。它们可能具有各种不同的命令行开关。有很多可能的工具可以使用。(non-MSI,MSI,admin-tools,multi-platform, 等...)。

NSIS / Inno:常见的免费工具,例如Inno Setup似乎使提取变得困难(非官方解压器,我没有尝试过,由 virustotal.com 运行)。而NSIS似乎使用标准存档软件(7-zip 等)可以打开和提取的常规存档。

一般技巧:一个技巧是启动setup.exe并查看。另一个技巧是使用或类似的存档工具来查看它们是否可以读取格式。有些人声称成功。不是我使用的技术。- 在设置运行后捕获对计算机所做的更改并对其进行清理 -需要一个特殊的工具(大多数免费工具来来往往,Advanced Installer Architect 和 AdminStudio 都是大玩家)。1) system's temp folder for extracted files2) 7-Zip, WinRAR, WinZip3) opening the setup.exe in Visual Studio4) And there is obviously application repackaging


更新:用于创建安装程序的各种部署工具的快速介绍: 如何创建 Windows 安装程序(综合链接)。

以及截至目前(2018 年)最常用的开发工具的更简单列表视图,以便更快地阅读和概述。

为了妥善保管:


只是免责声明setup.exe文件可以包含嵌入式 MSI,它可以是传统样式(非 MSI)安装程序,也可以只是常规可执行文件,无法进行任何提取。下面的“讨论”首先介绍了对 MSI 文件使用管理映像以及如何从 setup.exe 文件中提取 MSI 文件。然后它提供了一些链接来处理其他类型的 setup.exe 文件。另请参阅评论部分。

更新:现在直接在下面添加了一些部分,在使用管理安装的 MSI 文件提取的描述之前。最重要的是关于提取 WiX setup.exe 包的宣传(新来的孩子)。请记住,查找提取的安装文件的“最后手段”是启动安装程序,然后在临时文件夹中查找提取的文件(按住Windows Key、点击R、键入%temp%%tmp%点击Enter)-尽管首先尝试其他选项-出于可靠性原因.

为所有这些繁重的相互联系造成的“普遍混乱”道歉。我相信如果你在链接中挖掘足够多的东西,你会找到你需要的东西,但内容确实应该被清理和组织得更好。

一般链接:

提取内容:

供应商链接:


WiX 工具包和刻录包(setup.exe 文件)

技术说明:WiX 工具包现在提供setup.exe使用引导程序工具构建的文件Burn,您需要工具包自己的dark.exe反编译器来提取这些文件。Burn 用于构建 setup.exe 文件,这些文件可以按指定顺序安装多个嵌入式 MSI 或可执行文件。这是一个示例提取命令:

dark.exe -x outputfolder MySetup.exe

在运行此类提取之前,需要一些先决条件:

  1. 下载并安装 WiX 工具包(链接到先前的答案以及有关 WiX 的一些额外上下文信息 - 以及下载链接)。
  2. 安装 WiX 后,只需打开一个command prompt,CD到它所在的文件夹setup.exe。然后指定上面的命令并按Enter
  3. 输出文件夹将包含几个子文件夹,其中包含提取的 MSI 和 EXE 文件以及 Burn GUI 的清单和资源文件(当然,如果首先存在于 setup.exe 文件中)。
  4. 您现在可以依次提取提取的 MSI 文件(或 EXE 文件)的内容。对于意味着运行管理员安装的 MSI - 如下所述。

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

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

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

重要提示Windows Installer 会在系统上缓存已安装的 MSI 文件,以用于修复、修改和卸载方案。从 Windows 7(MSI 版本 5)开始,MSI 文件现在以全尺寸缓存,以避免破坏文件签名,防止安装程序启动时出现 UAC 提示(一个已知的 Vista 问题)。这可能会导致磁盘空间消耗的巨大增加(某些系统为几 GB)。为防止缓存巨大的 MSI 文件,您应该在安装前运行软件包的管理员安装。这就是在托管网络中进行适当部署的公司将如何做事,它将剥离 cab 文件并使用一个小的 MSI 文件和除此之外的文件创建一个网络安装点。


管理员安装有很多用途

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

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

  • 提取和检查安装程序文件
    • 了解实际安装的内容以及安装位置
    • 确保文件看起来值得信赖和安全(没有病毒 - 恶意软件和病毒仍然可以隐藏在 MSI 文件中)
  • 通过系统管理软件(例如SCCM)部署
  • 企业应用重新打包
  • 维修、修改和自行维修操作
  • 修补和升级
  • MSI 广告(除其他细节外,这涉及“从源代码运行”功能,您可以直接从网络共享运行,并且只安装快捷方式和注册表数据)
  • 其他一些较小的细节

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


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

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

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

  • MSI 文件

    msiexec /a File.msi
    

    那是用 GUI 运行的,你也可以默默地做:

    msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn
    
  • setup.exe 文件

    setup.exe /a
    

setup.exe文件也可以是传统风格的安装程序(非 MSI)或可怕的Installscript MSI文件类型 - 一种众所周知的带有不符合标准的混合 MSI 格式的错误 Installshield 项目类型。它本质上是一个具有自定义的、更高级的 GUI 的 MSI,但它也充满了错误。

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

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

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

于 2014-07-28T01:54:51.730 回答
23

7-Zip应该可以解决问题。

有了它,您可以提取 EXE 中的所有文件(因此,也是一个 MSI 文件)。

尽管您可以使用 7-Zip 来完成,但更好的方法是Stein Åsmul指出的管理安装。

于 2009-10-10T12:30:28.660 回答
15

我猜这个问题主要是关于给定标签的 InstallShield,但如果有人来到这里对基于 WiX 的软件包(可能还有其他人)遇到同样的问题,只需使用 /extract 调用安装程序,如下所示:

C:\> installer.exe /extract

这会将 MSI 放在安装程序旁边的文件夹中。

于 2012-12-18T02:31:59.087 回答
8

从参数开始:

setup.exe /A

要求保存包含的文件(包括MSI)。

这可能取决于创建setup.exe.

于 2010-07-09T09:57:50.703 回答
6

唯一的方法是运行 exe 并收集 MSI。您必须注意的是,如果您使用 MST 转换 MSI,它们可能会丢失。

我使用这个批处理命令行:

SET TMP=c:\msipath

MD "%TMP%"

SET TEMP=%TMP%

start /d "c:\install" install.exe /L1033

PING 1.1.1.1 -n 1 -w 10000 >NUL

for /R "%TMP%" %%f in (*.msi) do copy "%%f" "%TMP%"

taskkill /F /IM msiexec.exe /T
于 2012-08-23T10:26:19.660 回答
3

启动安装程序,但不要按下Install >按钮。然后

cd "%AppData%\..\LocalLow\Sun\Java"

并在其中一个子目录(例如jre1.7.0_25)中找到您的 MSI 文件。

请注意,也Data1.cab需要来自该子目录。

于 2013-08-18T16:53:05.453 回答
0

无需使用任何工具!!我们可以按照简单的方法。

我不知道哪个工具构建了您的自解压安装程序,因此,我将不得不提供一个一般性的答复。

大多数具有这种性质的程序将包文件 (.msi) 提取到 TEMP 目录中。此行为是 InstallShield Developer 的默认行为。

如果没有其他信息,我建议您简单地启动设置,一旦显示第一个 MSI 对话框,您可以检查您的 TEMP 目录中是否有新创建的子目录或 MSI 文件。在取消/停止安装程序之前,只需从 TEMP 文件夹中复制该 MSI 文件。之后,您可以取消安装。

于 2016-03-23T09:05:48.900 回答