如何在cab存档中获取有序的项目列表?

时间:2017-01-31 19:05:40

标签: windows wix cab

我有大约350个文件的182Mb未压缩.cab文件。我想使用命令行工具对其应用压缩。这似乎是一项简单的任务 - 使用expand.exe将文件内容提取到临时文件夹中,从文件夹中的文件构建ddf文件并将其提供给makecab.exe。

然而事情并没有按预期发挥作用。如果我从临时文件夹列表中为makecab.exe构建文件列表并且不创建压缩.cab它看起来比原始.cab大2Mb。这对我来说是一个令人不快的惊喜,因为我期望从同一组文件生成的未压缩的.cab文件是相同的。

使用7Z GUI Archive Viewer检查两个.cab文件的内容,发现两个.cab文件中的项目顺序不同。第一个包含82个块,第二个包含88个块。

这个观察结果让我相信ddf文件中项目的排序会影响makecab.exe的输出。

我尝试使用expand.exe -d,希望该工具按照实际出现在存档中的顺序输出.cab文件中的条目列表。但是,该工具按字母顺序输出条目列表。

问题:

  • 是否可以按照标准命令行工具在归档中出现的顺序获取.cab文件中的条目列表?
  • 是否可以指示ddf文件中列出的makecab.exe重新排序文件以获得最佳布局?

我的ddf文件片段:

.OPTION EXPLICIT
.Set Cabinet=ON
.Set GenerateInf=OFF
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
.Set ReservePerCabinetSize=0
.Set ReservePerDataBlockSize=0
.Set ReservePerFolderSize=0
.Set DiskDirectoryTemplate=
.Set ClusterSize=100000
.Set CabinetNameTemplate=C:\cygwin\tmp\radE7C61.cab
.Set Compress=OFF
"C:\cygwin\tmp\radCF764_core.cab.contents\File_003760a98ae0a9890833a40c14abcf3a" "File_003760a98ae0a9890833a40c14abcf3a" /INF=NO
"C:\cygwin\tmp\radCF764_core.cab.contents\File_00632a927382f2d81133ca36816174b7" "File_00632a927382f2d81133ca36816174b7" /INF=NO
"C:\cygwin\tmp\radCF764_core.cab.contents\File_008544959270414d85c069b9e9cdd1d6" "File_008544959270414d85c069b9e9cdd1d6" /INF=NO
"C:\cygwin\tmp\radCF764_core.cab.contents\File_0296ad9da2e43352229fd713f496db61" "File_0296ad9da2e43352229fd713f496db61" /INF=NO

解决

我的源.cab文件是使用WiX创建的,包含许多二进制相等文件。对于此类文件,WiX仅存储其中一个,而其他文件仅被引用。 makecab.exe不能这样做。 makecab.exe可以重新排序输入项以获得更好的性能,但它不能用引用替换重复的文件。 因此,对于makecab.exe的ddf文件中的项目的不同排序没有多大意义,与WiX可以执行的工作相比,如果某些项目是重复的,该工具仍将生成更大的文件。

0 个答案:

没有答案