【问题标题】:Programmatically extract contents of InstallShield setup.exe以编程方式提取 InstallShield setup.exe 的内容
【发布时间】:2011-12-30 15:50:35
【问题描述】:

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

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

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

我found that 一些InstallShield 版本支持/b 或/extract_all。然而,没有什么好办法知道,只是启动 exe 并希望它能够有序地提取和终止,而不是显示 GUI 对话框,这似乎不是一个好的解决方案。因此,我正在寻找一种更稳定的方法。
欢迎提出想法。

【问题讨论】:

  • 这是否适用于任何版本的 InstallShield 生成的任何 setup.exe,无论项目类型如何,还是适用于特定的 setup.exe?
  • 谢谢@Christopher。已尝试增强问题。

标签: installation installshield


【解决方案1】:

没有支持的方法来执行此操作,但您是否不必检查与每个安装程序相关的文件以了解如何在提取它们后实际安装它们?假设您可以花时间找出适用的命令行,这里有一些通常允许您提取安装的候选参数。

基于 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\""

基于安装脚本:

  • setup.exe /s /extract_all

基于套件(如何安装生成的文件可能并不明显):

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

【讨论】:

  • FWIW Michael 为 InstallShield 工作。另外我认为您可以通过查找嵌入式资源或检查 DLL 依赖项来推断它是哪种 setup.exe。我看到一个 MSI setup.exe 依赖于 MSI.dll。我猜 InstallScript EXE 不会。
  • 使用常用 setup.exe 命令行查看 similar answer here 和 link to a pdf file。
  • 在此处查看我的答案:superuser.com/a/180980/47628 了解可能适用于某些较旧的非基于 MSI 的 IS 设置的工具。
【解决方案2】:

http://www.compdigitec.com/labs/files/isxunpack.exe

用法:isxunpack.exe yourinstallshield.exe

它将提取到同一个文件夹中。

【讨论】:

  • 这是唯一一个对我有用的解压 ISv12 安装程序的程序。该程序报告了一个问题,但它还是提取了所有内容。
  • 很棒的工具,感谢分享 - 适用于我当前的安装程序反转,而不幸的是 @MichaelUrman 提到的提示没有。
【解决方案3】:

在 Linux 上有 unshield,它对我来说效果很好(即使 GUI 包含自定义威慑,如许可证密钥提示)。它包含在所有主要发行版(arch、suse、debian 和 fedora)的存储库中,其源代码位于 https://github.com/twogood/unshield

【讨论】:

  • 确实,不用exe也可以使用libunshield。
【解决方案4】:

开始于:

setup.exe /?

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

【讨论】:

    【解决方案5】:

    名为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.
    

    【讨论】:

    • cabextract 将解压缩任何包含 Microsoft cabinet 文件的内容,但通常 InstallShield 不会,尽管有名为“data1.cab”的文件。相反,要解压 InstallShield“cab”文件,请使用属于 SynCE 项目一部分的 unshield 程序。
    • SynCE 这几天好像被抛弃了,unshield is now hosted at github
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2012-11-28
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2015-06-30
    • 2018-08-29
    相关资源
    最近更新 更多