Windows installer 从MSI提取CAB文件以创建较小的MSI?

Windows installer 从MSI提取CAB文件以创建较小的MSI?,windows-installer,cab,Windows Installer,Cab,我正在考虑从一个大型MSI文件中删除CAB文件,这样我就剩下两个文件:一个小型MSI文件和一个大型CAB文件 我一直在使用msidb来提取CAB,但我遇到了一个难题,无法想出如何减小MSI的大小,以说明CAB不再存储在其中 有什么建议吗?MSI API没有紧凑的数据库功能。有一个帮助主题: 这表明: 删除浪费的存储空间并减少.msi的最终大小 文件,您有以下选项。•导出中的所有表 将数据库导入.idt文件,然后将这些文件导入新数据库。 这将产生尽可能紧凑的存储空间使用软件 用于压缩OLE文档文件

我正在考虑从一个大型MSI文件中删除CAB文件,这样我就剩下两个文件:一个小型MSI文件和一个大型CAB文件

我一直在使用msidb来提取CAB,但我遇到了一个难题,无法想出如何减小MSI的大小,以说明CAB不再存储在其中


有什么建议吗?

MSI API没有紧凑的数据库功能。有一个帮助主题:

这表明:

删除浪费的存储空间并减少.msi的最终大小 文件,您有以下选项。•导出中的所有表 将数据库导入.idt文件,然后将这些文件导入新数据库。 这将产生尽可能紧凑的存储空间使用软件 用于压缩OLE文档文件存储空间的实用程序


假设这是您的MSI,只需使用您的工具以未压缩的方式构建它。如果它是另一个微星,你将不得不遵循建议。您还需要更新媒体表,告诉它您不再使用嵌入式cab。

我注意到,在使用msidb-x提取cab文件,然后使用-k删除流之后。然后,您可以在Orca中打开msi并保存它,这样可以减小msi的大小。不确定您为什么要这样做,因为普通用户会提取您的文件,并且在提取的文件旁边会有一个小msi。话虽如此,我想您可以在手动提取驾驶室后在Orca中打开MSI,并执行“另存为”而不是“保存”。这可能只会创建一个新的更小的文件,因为它现在已序列化,在COM结构化存储文件(MSI文件格式)中没有任何“间隙”。