windows - Hvordan får man bestilt en liste over emner i førerhusarkivet?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har 182Mb ukomprimeret .cab-fil med ~ 350 filer. Jeg vil gerne bruge komprimering til det ved hjælp af kommandolinjeværktøjer. Dette synes at være en simpel opgave - brug expand.exe til at udtrække indholdet af filen i midlertidig mappe, bygg ddf-fil fra filer i mappen og feed den til makecab.exe .


Men det virker ikke som forventet. Hvis jeg bygger en liste over filer til makecab.exe fra midlertidig mappeliste og ikke skaber komprimering .cab det ser ud til at være større end originalt .cab med 2Mb. Dette er en ubehagelig overraskelse for mig som jeg Forventede ukomprimerede .cab-filer, der er produceret fra det samme sæt af filer, er ens.


Inspektion af indholdet af to .cab-filer med 7Z GUI Archive Viewer afdækket, at emner i to .cab-filer er i forskellig rækkefølge. Også den første indeholder 82 blokke og den anden 88 blokke.


Denne observation får mig til at tro, at bestilling af varer i ddf-filen påvirker output fra makecab.exe.


Jeg forsøgte at bruge expand.exe -d med håb om at værktøjet vil udgive listen over poster i .cab-fil i den rækkefølge, de faktisk vises i arkivet. Men værktøjet udsender alfabetisk sorteret liste over poster.


spørgsmål:



  • Er det muligt at få en liste over poster i .cab-fil lige i den rækkefølge, de vises i arkivet med standard kommandolinjeværktøjer?

  • Er det muligt at instruere makecab.exe omordne filer opført i ddf fil for bedste layout?



Mit ddf filfragment:


.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	mp
adE7C61.cab
.Set Compress=OFF
"C:cygwin	mp
adCF764\_core.cab.contentsFile\_003760a98ae0a9890833a40c14abcf3a" "File\_003760a98ae0a9890833a40c14abcf3a" /INF=NO
"C:cygwin	mp
adCF764\_core.cab.contentsFile\_00632a927382f2d81133ca36816174b7" "File\_00632a927382f2d81133ca36816174b7" /INF=NO
"C:cygwin	mp
adCF764\_core.cab.contentsFile\_008544959270414d85c069b9e9cdd1d6" "File\_008544959270414d85c069b9e9cdd1d6" /INF=NO
"C:cygwin	mp
adCF764\_core.cab.contentsFile\_0296ad9da2e43352229fd713f496db61" "File\_0296ad9da2e43352229fd713f496db61" /INF=NO


LØST


Min kilde .cab-fil blev oprettet med WiX og omfattede en række binære lige filer. For sådanne filer gemmer WiX kun en af ​​dem, og andre er kun henvist til. Makecab.exe kan ikke gøre det. Makecab.exe kan ombestille inputelementer til bedre ydeevne, men det kan ikke erstatte duplikerede filer med referencer.
Så forskellige ordrer af elementer i ddf-fil til makecab.exe gør ikke meget mening, værktøjet producerer stadig større filer i forhold til hvad WiX kan gøre, hvis nogle genstande er dubletter.

Bedste reference