Windows mobile WCELOAD无法安装压缩的CAB文件

Windows mobile WCELOAD无法安装压缩的CAB文件,windows-mobile,cab,cabwiz,Windows Mobile,Cab,Cabwiz,我想通过替换文件柜中的一个文件来处理用CABWIZ生成的一个(未签名的)CAB文件。目前,我正在使用Microsoft.Deployment.Compression.Cab.dll执行此任务(提取所有文件、替换目标文件、重新创建文件柜),只要我不启用压缩,效果就相当好 cabInfo.Pack(workingFolder.FullName, true, CompressionLevel.None, null); 一旦启用压缩,WM 6.5.3将不再安装CAB文件: 安装CABFILE失败 CA

我想通过替换文件柜中的一个文件来处理用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文件。

Microsoft.Deployment.Compression.CAB.dll使用的打包器是围绕系统文件
cabinet.dll
的托管打包器,它支持MSZIP算法。由于MS-RL对我的项目来说没有问题,我下载了并修改了CAB压缩库,如下所示:

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
}
使用MSZIP算法进行压缩后,WCELOAD会毫无问题地安装生成的CAB文件

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