Msbuild 压缩未压缩的MSI文件

Msbuild 压缩未压缩的MSI文件,msbuild,windows-installer,Msbuild,Windows Installer,我们有一个安装项目,它生成一个未压缩的MSI文件,并且根本没有setup.exe,稍后将由NSIS进行压缩。 在一个特殊的构建设置中,我想在MSI被NSI包装之前复制它,更改副本并保留它。我还希望在msbuild创建它之后对其进行压缩。 有没有一种简单的方法(可能是某种命令行工具?)可以用来压缩已经创建的msi文件?是的!请参见:) 有一系列示例脚本显示了如何使用Windows Installer API操作MSI文件 MSI文件本身从未被实际压缩,但它可以包含可能被压缩的嵌入式CAB文件 我建

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

是的!请参见:)

有一系列示例脚本显示了如何使用Windows Installer API操作MSI文件

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

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


你能找到的任何工具都能完全实现我上面提到的功能,但是你自己将其组合起来,应该可以更深入地理解MSI的工作原理:)

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

  • 执行msi的管理员安装
  • 使用修补程序传递所需的修补程序文件
  • 将WiFilVer.vbs和WiMakeCab.vbs文件从
    “C:\Program files\Microsoft SDK\Windows\v7.0\Samples\sysmgmt\msi\scripts”
    复制到管理员安装文件夹
  • 要使用新文件更新文件,请运行:
    CScript//nologo WiFilVer.vbs vendormsi.msi/U
  • 要创建cab文件并将其嵌入msi,请执行以下操作:
    cscript/nologo WiMakCab.vbs eTalk.msi Data1/R/L/C/U/E/S
  • 如果在步骤5中没有获得cab文件,请检查Orca中的媒体表,并查看:“查找压缩部分
  • 你现在应该有一个微星,其中包括一切
  • 使用内部或外部cab文件压缩MSI

  • 执行msi的管理员安装
  • 使用修补程序传递所需的修补程序文件
  • 将WiMakeCab.vbs文件从Windows SDK复制到管理安装文件夹
  • 运行:cscript WiMakCab.vbs Vendor.msi Data1/L/C/U/E
  • 你应该有一个内嵌cab文件的MSI

  • 谢谢听起来是个好主意,我将研究提取cab->压缩cab->将cab推入。