2013-07-23 52 views
3

我想通過替換CABWIZ中的文件來操縱我們的(未簽名的)CAB文件之一。目前,我正在使用Microsoft.Deployment.Compression.Cab.dll來完成此任務(提取所有文件,替換目標,重新創建機櫃),只要不啓用壓縮,效果會非常好。無法通過WCELOAD安裝壓縮的CAB文件

cabInfo.Pack(workingFolder.FullName, true, CompressionLevel.None, null); 

只要我能壓縮,WM 6.5.3將不再安裝CAB文件:

安裝的 CABFILE

是不成功的。

CABWIZ生成的原始文件是壓縮的,所以我知道WM中的WCELOAD可以處理壓縮文件。我搜索了Microsoft庫的配置選項,但沒有找到任何配置選項。

有沒有辦法用Microsoft庫創建一個壓縮的CAB,或者是否有任何其他庫可以用於此任務?有很多庫可以操縱CAB文件,但是我找不到可以創建與WCELOAD兼容的壓縮CAB文件的信息。

更新:經過一番研究,我發現WCELOAD支持MSZIP算法,而Microsoft庫使用LZX。所以我正在尋找一個能夠使用MSZIP算法創建壓縮CAB文件的庫。

回答

2

Microsoft.Deployment.Compression.Cab.dll使用的打包程序是圍繞系統文件cabinet.dll的託管包裝,它支持MSZIP算法。由於MS-RL是沒有問題的我的項目,我下載了WIX sources和修改的CAB壓縮庫是這樣的:

CompressionLevel.cs

public enum CompressionLevel 
{ 
    /// <summary>Do not compress files, only store.</summary> 
    None = 0, 

    /// <summary>Minimum compression; fastest.</summary> 
    Min = 1, 

    /// <summary>A compromize between speed and compression efficiency.</summary> 
    Normal = 6, 

    /// <summary>Maximum compression; slowest.</summary> 
    Max = 10, 

    /// <summary>Compress files using the MSZIP algorithm.</summary> 
    MsZip = 11 
} 

CabPacker.cs

private static NativeMethods.FCI.TCOMP GetCompressionType(CompressionLevel compLevel) 
{ 
    if (compLevel == CompressionLevel.MsZip) 
    { 
    return NativeMethods.FCI.TCOMP.TYPE_MSZIP; 
    } 
    else 
    { 
    // existing code goes here 
    } 
} 

壓縮使用MSZIP算法,WCELOAD可以毫無問題地安裝生成的CAB文件。

相關問題