以编程方式提取InstallShield setup.exe的内容

32

我正在尝试提取InstallShield setup.exe文件的文件内容。(我的计划是在后台工具中使用它,因此必须以编程方式完成,没有任何用户交互。)

这是否可能?
(初步研究似乎表明会失败。)

如果有通用解决方案适用于所有最近版本的InstallShield,那将是最好的。
否则,如果解决方案仅适用于某些版本的InstallShield,那也算是一步。 (可能可以通过查看exe文件的版本资源来推断出setup.exe的InstallShield版本。

发现某些InstallShield版本支持/b/extract_all。但是没有一个好的方法可以知道,仅仅启动exe并希望它提取并终止而不显示GUI对话框似乎不是一个好的解决方案。因此,我正在寻找更稳定的方法。
欢迎提出想法。


这是针对由任何版本的InstallShield生成的任何setup.exe,无论项目类型如何,还是针对特定的setup.exe? - Christopher Painter
感谢@Christopher。尝试改进问题。 - leiflundgren
5个回答

41

目前没有支持的方法来做这件事,但是在解压缩后如何安装相关安装程序的文件需要进行检查。假设你可以花时间找出哪个命令适用于该操作,下面是一些备选参数,通常可以允许你提取一个安装。

基于MSI (可能不会为InstallScript MSI安装产生可用的镜像):

  • setup.exe /a /s /v"/qn TARGETDIR=\"choose-a-location\""

    或者,也可以提取前提条件(对于可行的版本):

  • setup.exe /a"choose-another-location" /s /v"/qn TARGETDIR=\"choose-a-location\""

基于InstallScript:

  • setup.exe /s /extract_all

基于Suite(可能不明显如何安装结果文件):

  • setup.exe /silent /stage_only ISRootStagePath="choose-a-location"

2
顺便提一下,Michael 在 InstallShield 工作。此外,我认为您可以通过查找嵌入式资源或检查 DLL 依赖关系来推断出它是什么类型的 setup.exe。我看到一个 MSI setup.exe 依赖于 MSI.dll。我猜测 InstallScript EXE 不会有这个依赖关系。 - Christopher Painter
1
在此处查看类似的答案,其中包含一个PDF文件链接,其中包含常见的setup.exe命令行。 - Stein Åsmul
请查看我的答案:http://superuser.com/a/180980/47628,其中列出了一些适用于某些旧的非MSI安装程序的工具。 - B. Shea

13

2
那是唯一能在我的电脑上解包ISv12安装程序的程序。这个程序报告了一个问题,但它仍然成功地提取了所有内容。 - gcode
很棒的工具,感谢分享 - 对于我的当前安装程序反向工程工作得很好,而@MichaelUrman提到的提示不幸没有起作用。 - Till

5
在Linux上,有一个名为unshield的工具,对于我来说效果很好(即使GUI包括自定义威慑措施,如许可证密钥提示)。它已经包含在所有主要发行版的存储库中(基于arch、suse、debian和fedora),并且其源代码可在https://github.com/twogood/unshield上获取。

实际上,您也可以在没有任何exe的情况下使用libunshield。 - Polluks
无法与最新的InstallShield .exe一起使用,该文件包含了联想BIOS更新。https://download.lenovo.com/consumer/mobiles/glcn46ww.exe - Henk Poley

3

从这里开始:

setup.exe /?

你应该看到一个弹出对话框,其中显示了一些选项。


0

这个名为 cabextract 的免费开源程序不仅可以列出和提取 .cab 文件的内容,还可以处理 Macrovision 的归档文件:

% cabextract /tmp/QLWREL.EXE
Extracting cabinet: /tmp/QLWREL.EXE
  extracting ikernel.dll
  extracting IsProBENT.tlb
  ....
  extracting IScript.dll
  extracting iKernel.rgs

All done, no errors.

2
cabextract可以解压包含Microsoft cabinet文件的任何内容,但通常InstallShield不行,尽管它有名为"data1.cab"的文件。相反,要解压InstallShield的“cab”文件,请使用SynCE项目的一部分的unshield程序。 - Stuart Caie
2
SynCE 看起来现在已经被放弃了,unshield 现在托管在 Github 上 - Stuart Caie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接