【问题标题】:Compressed CAB files cannot be installed by WCELOADWCELOAD 无法安装压缩的 CAB 文件
【发布时间】:2013-07-22 21:04:59
【问题描述】:

我想通过替换文件柜中的文件来操作我们使用 CABWIZ 生成的(未签名的)CAB 文件之一。目前我正在使用Microsoft.Deployment.Compression.Cab.dll 执行此任务(提取所有文件,替换目标,重新创建文件柜),只要我不启用压缩,它就可以很好地工作。

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 文件的库。

【问题讨论】:

    标签: windows-mobile cab cabwiz


    【解决方案1】:

    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 文件。

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      相关资源
      最近更新 更多