【发布时间】:2010-09-04 06:36:14
【问题描述】:
我们有一个安装项目,它生成一个未压缩的 MSI 文件,根本没有 Setup.exe,稍后将由 NSIS 压缩。
在一个特殊的构建设置中,我想在 NSIS 打包之前复制那个 MSI,更改副本并保留它。在 msbuild 创建它之后,我还想压缩它。
有没有一种简单的方法(可能是某种命令行工具?)我可以用来压缩已经创建的 msi 文件?
【问题讨论】:
我们有一个安装项目,它生成一个未压缩的 MSI 文件,根本没有 Setup.exe,稍后将由 NSIS 压缩。
在一个特殊的构建设置中,我想在 NSIS 打包之前复制那个 MSI,更改副本并保留它。在 msbuild 创建它之后,我还想压缩它。
有没有一种简单的方法(可能是某种命令行工具?)我可以用来压缩已经创建的 msi 文件?
【问题讨论】:
是的!见Windows SDK :)
有很多示例脚本展示了如何使用 Windows Installer API 操作 MSI 文件。
MSI 文件本身实际上从未被压缩,但它可以包含可能被压缩的嵌入式 CAB 文件。
我建议将一些脚本放在一起,从 MSI 中提取任何嵌入的 CAB 文件,一次将它们解压缩到一个临时文件夹,使用更好的压缩率重新压缩,然后将 MSI 中的未压缩 CAB 替换为新压缩的。
您可以找到的任何工具都可以完全按照我上面提到的方式进行操作,但是您自己将它们组合在一起应该可以更深入地了解 MSI 的工作原理:)
【讨论】:
将 MSI 从未压缩转换为压缩。
"C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\msi\scripts" 复制到管理员安装文件夹。CScript //nologo WiFilVer.vbs vendormsi.msi /U
cscript /nologo WiMakCab.vbs eTalk.msi Data1 /R /L /C /U /E /S
使用内部或外部 cab 文件压缩 MSI
【讨论】: