压缩未压缩的MSI文件

时间:2010-04-26 10:07:47

标签: msbuild windows-installer

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

2 个答案:

答案 0 :(得分:2)

是的!请参阅Windows SDK:)

有许多示例脚本显示如何使用Windows Installer API处理MSI文件。

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

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

您可以找到的任何工具都会完全按照我上面提到的那样工作,但是将它们放在一起应该可以更深入地了解MSI的工作方式:)

答案 1 :(得分:0)

将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中的Media表并查看:“http://www.spinnersoftware.com/kb/en/msi/createmsi.html”查找有关压缩的部分。
  7. 你现在应该拥有一个包含所有内容的msi。
  8. 使用内部或外部cab文件压缩MSI

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