首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCELOAD无法安装压缩的CAB文件

WCELOAD无法安装压缩的CAB文件
EN

Stack Overflow用户
提问于 2013-07-23 16:47:11
回答 1查看 740关注 0票数 3

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

代码语言:javascript
复制
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算法,而微软库使用LZX。因此,我正在搜索一个库,它能够使用MSZIP算法创建压缩的CAB文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 07:17:26

Microsoft.Deployment.Compression.Cab.dll使用的封隔器是系统文件cabinet.dll的托管包装器,它确实支持MSZIP算法。由于MS对我的项目没有问题,所以我下载了WIX源并修改了CAB压缩库,如下所示:

CompressionLevel.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
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文件,没有任何问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17816214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档