【问题标题】:Compressing an uncompressed MSI file压缩未压缩的 MSI 文件
【发布时间】:2010-09-04 06:36:14
【问题描述】:

我们有一个安装项目,它生成一个未压缩的 MSI 文件,根本没有 Setup.exe,稍后将由 NSIS 压缩。
在一个特殊的构建设置中,我想在 NSIS 打包之前复制那个 MSI,更改副本并保留它。在 msbuild 创建它之后,我还想压缩它。
有没有一种简单的方法(可能是某种命令行工具?)我可以用来压缩已经创建的 msi 文件?

【问题讨论】:

    标签: msbuild windows-installer


    【解决方案1】:

    是的!见Windows SDK :)

    有很多示例脚本展示了如何使用 Windows Installer API 操作 MSI 文件。

    MSI 文件本身实际上从未被压缩,但它可以包含可能被压缩的嵌入式 CAB 文件。

    我建议将一些脚本放在一起,从 MSI 中提取任何嵌入的 CAB 文件,一次将它们解压缩到一个临时文件夹,使用更好的压缩率重新压缩,然后将 MSI 中的未压缩 CAB 替换为新压缩的。

    您可以找到的任何工具都可以完全按照我上面提到的方式进行操作,但是您自己将它们组合在一起应该可以更深入地了解 MSI 的工作原理:)

    【讨论】:

    • 谢谢。听起来是个好主意,我会研究提取 cab->压缩 cab->将 cab 推入。
    【解决方案2】:

    将 MSI 从未压缩转换为压缩。

    1. 以管理员方式安​​装 msi。
    2. 使用 PATCH 传递你想要的补丁文件就可以了。
    3. 将 WiFilVer.vbs 和 WiMakeCab.vbs 文件从 "C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\msi\scripts" 复制到管理员安装文件夹。
    4. 要使用新文件更新文件,请运行:CScript //nologo WiFilVer.vbs vendormsi.msi /U
    5. 创建 cab 文件并将其嵌入 msi:cscript /nologo WiMakCab.vbs eTalk.msi Data1 /R /L /C /U /E /S
    6. 如果您在第 5 步中没有得到 cab 文件,请检查 Orca 中的媒体表并查看:“http://www.spinnersoftware.com/kb/en/msi/createmsi.html”查找有关压缩的部分。
    7. 您现在应该有一个包含所有内容的 msi。

    使用内部或外部 cab 文件压缩 MSI

    1. 以管理员方式安​​装 msi。
    2. 使用 PATCH 传递你想要的补丁文件就可以了。
    3. 将 WiMakeCab.vbs 文件从 Windows SDK 复制到管理员安装文件夹。
    4. 运行:cscript WiMakCab.vbs Vendor.msi Data1 /L /C /U /E
    5. 您应该有一个带有嵌入式 cab 文件的 MSI。

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 1970-01-01
      • 2011-09-18
      • 2019-02-24
      • 2013-11-16
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2010-09-05
      相关资源
      最近更新 更多