我想提取EXE设置的MSI以通过网络发布。
例如,使用Universal Extractor,但它不适用于Java Runtime Environment。
对于基于InstallShield MSI的项目,我发现以下工作:
setup.exe /s /x /b"C:\FolderInWhichMSIWillBeExtracted" /v"/qn"
此命令将导致在您可以自由指定的目录中提取的MSI以及无提示的产品卸载失败。
命令行基本上告诉setup.exe尝试卸载产品(/ x)并以静默方式(/ s)执行此操作。这样做时,它应该将MSI提取到特定位置(/ b)。
/ v命令将参数传递给Windows Installer,在本例中为/ qn参数。 / qn参数禁用安装程序的任何GUI输出。
快速列表:有许多常见类型的
setup.exe
文件。以下是其中一些“短名单”。 More fleshed-out details here(朝下)。
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二进制文件 - install WiX来提取WiX setup.exe(截至目前)。 More(第4节)。
总是:
setup.exe /?
MSI提取物:msiexec.exe
/ File.msi
提取物:
msiexec /a File.msi msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn
许多设置工具:不可能涵盖所有可能的setup.exe
文件。它们可能具有各种不同的命令行开关。 There are so many possible tools that can be used。 (non-MSI
,MSI
,admin-tools
,multi-platform
等......)。
NSIS / Inno:Commmon,像Inno Setup
这样的免费工具似乎很难提取(unofficial unpacker,我没有尝试过,由virustotal.com运行)。而NSIS
似乎使用常规档案,标准档案软件(7-zip等)可以打开和提取。
一般技巧:一个技巧是发射
setup.exe
并查看1)
system's temp folder for extracted files
。另一个技巧是使用2)
7-Zip, WinRAR, WinZip
或类似的归档工具来查看它们是否可以读取格式。一些人声称3)
opening the setup.exe in Visual Studio
取得了成功。不是我使用的技术。4)
And there is obviously application repackaging
- 在设置运行并清理它之后捕获对计算机所做的更改 - requires a special tool(大多数免费的来来往往,Advanced Installer Architect和AdminStudio都是大玩家)。
更新:快速介绍用于创建安装程序的各种部署工具:How to create windows installer(综合链接)。
和更简单的list view of the most used development tools截至目前(2018年),以便更快地阅读和概述。
并保管:
只是免责声明:setup.exe
文件可以包含嵌入式MSI,它可以是传统样式(非MSI)安装程序,也可以只是一个常规可执行文件,无法提取任何内容。下面的“讨论”首先介绍了MSI文件的管理映像的使用以及如何从setup.exe文件中提取MSI文件。然后它提供了一些处理其他类型的setup.exe文件的链接。另请参阅评论部分。
更新:在使用管理安装的MSI文件提取描述之前,现在已经在下面直接添加了几个部分。最重要的是关于提取WiX setup.exe捆绑包(块上的新孩子)的模糊。请记住,查找提取的安装文件的“最后手段”是启动安装程序,然后在临时文件夹中查找提取的文件(按住Windows键,点击R,键入%temp%
或%tmp%
并按Enter键) - 尝试其他选项首先是 - 出于可靠性的原因。
抱怨所有这些沉重的相互联系的“广义混乱”。如果你在链接中挖掘得足够多,我相信你会找到你需要的东西,但内容应该真的得到清理和整理。
一般链接:
提取内容:
供应商链接:
技术说明:WiX工具包现在提供使用引导程序工具setup.exe
构建的Burn
文件,您需要工具包自己的dark.exe
反编译器来提取。 Burn用于构建setup.exe文件,可以按指定顺序安装多个嵌入式MSI或可执行文件。这是一个示例提取命令:
dark.exe -x outputfolder MySetup.exe
在运行此类提取之前,需要执行一些必备步骤:
command prompt
,CD
打开到setup.exe
所在的文件夹即可。然后指定上面的命令并按Enter键MSI或Windows Installer内置了对此的支持 - 从MSI文件中提取文件。这被称为administrative installation。它基本上是作为一种创建网络安装点的方法,从中可以在许多目标计算机上运行安装。这可确保源文件始终可用于任何修复操作。
请注意,运行管理安装与使用zip工具提取文件是完全不同的!后者不会调整媒体表的媒体布局,以便将包设置为使用外部源文件 - 这是正确的方法。总是喜欢在任何hacky zip提取上运行实际的管理员安装。至于压缩,实际上three different compression algorithms用于MSI文件格式内的cab文件:MSZip,LZX和存储(未压缩)。通过执行管理员安装可以正确处理所有这些问题。
重要:Windows Installer caches installed MSI files on the system用于修复,修改和卸载方案。从Windows 7(MSI版本5)开始,MSI文件现在缓存为完整大小,以避免破坏阻止设置启动时UAC提示的文件签名(已知的Vista问题)。这可能会导致磁盘空间消耗大幅增加(某些系统为几千兆字节)。要防止缓存巨大的MSI文件,您应该在安装之前运行该程序包的admin-install。这就是在托管网络中正确部署的公司如何做事,它将剥离cab文件,并使用小的MSI文件和除此之外的文件创建网络安装点。
建议阅读有关admin-installs的更多信息,因为它是一个有用的概念,我在stackoverflow上写了一篇文章:What is the purpose of administrative installation initiated using msiexec /a?。
从本质上讲,管理员安装对于:
请阅读上面链接的stackoverflow帖子以获取更多详细信息。对于系统管理员,应用程序打包器,设置开发人员,发布经理甚至普通用户来说,这是一个非常重要的概念,可以看到他们正在安装的内容等等......
您可以通过几种不同的方式执行admin-install,具体取决于安装程序的交付方式。基本上它既可以作为MSI文件提供,也可以包含在setup.exe文件中。
从提升的命令提示符运行这些命令,并按照GUI中的说明进行交互式命令行:
msiexec /a File.msi
那是用GUI运行的,你也可以默默地做到:
msiexec /a File.msi TARGETDIR=C:\MyInstallPoint /qn
setup.exe /a
setup.exe文件也可以是传统样式设置(非MSI)或可怕的Installscript MSI文件类型 - 一种众所周知的错误Installshield项目类型,具有混合的非标准兼容的MSI格式。它本质上是一个带有自定义,更高级GUI的MSI,但它也充满了bug。
对于旧版setup.exe文件,/ a将不执行任何操作,但您可以尝试/ extract_all:[path]开关,如this pdf中所述。它也是静音安装和其他东西的一个很好的参考。另一个资源是this list of Installshield setup.exe command line parameters。
MSI补丁文件(* .MSP)可以是applied to an admin image来正确提取其文件。 7Zip也可以提取文件,但它们的格式不正确。
最后 - 最后的手段 - 如果没有其他方法可行,您可以通过清除系统上的临时文件夹来获取解压缩的安装文件,以交互方式启动setup.exe,然后等待第一个对话框显示。在大多数情况下,安装程序会将一堆文件提取到临时文件夹。有时文件很简单,其他时候是CAB格式,但是Winzip,7Zip甚至Universal Extractor(尚未测试过这个产品) - 也许可以打开这些文件。
我猜这个问题主要是关于给出标签的InstallShield,但是如果有人为这些基于WiX的软件包(可能还有其他软件包)带来同样的问题,只需用/ extract调用安装程序,如下所示:
C:\> installer.exe /extract
这将把MSI放在安装程序旁边的文件夹中。
从参数开始:
setup.exe /A
要求保存包含的文件(包括MSI
)。
这可能取决于创建setup.exe
的软件。
唯一的方法是运行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
启动安装程序,但不要按安装>按钮。然后
cd "%AppData%\..\LocalLow\Sun\Java"
并在其中一个子目录中找到您的MSI文件(例如,jre1.7.0_25
)。
请注意,该子目录中的Data1.cab
也是必需的。
没有必要使用任何工具!我们可以按照简单的方式。
我不知道哪个工具构建了自解压安装程序,因此,我将不得不提供一般响应。
大多数此类程序都将包文件(.msi)解压缩到TEMP目录中。此行为是InstallShield Developer的默认行为。
如果没有其他信息,我建议您只需启动设置,一旦显示第一个MSI对话框,您可以检查TEMP目录中是否有新创建的子目录或MSI文件。在取消/停止安装程序之前,只需从TEMP文件夹中复制该MSI文件即可。之后,您可以取消安装。