如何使用 c# 解压缩 MSZIP 文件

本文关键字:MSZIP 文件 解压缩 何使用 | 更新日期: 2023-09-27 18:35:33

我有一个VB6应用程序的安装程序,我需要用c#单独解压缩文件。所有文件都以下划线结尾,例如 image.jp_ .我看到使用7ZIP程序使用MSZIP压缩模式压缩文件,但我无法解压缩。

编辑

我的解决方案

如何使用 C# 创建 CAB(内阁)文件

基于WiX的使用,我使用链接中所述的DLL:


Microsoft.Deployment.Compression.dll Microsoft.Deployment.Compression.Cab.dll

然后我没有使用 CAB 文件,而是将我的文件放在image.jp_,它运行良好。谢谢大家给我乱扔这个问题,查理,我喜欢说谢谢

CabInfo cab = new CabInfo(@"C:'test'image.jp_");
cab.Unpack(@"C:'test'");

谢谢

如何使用 c# 解压缩 MSZIP 文件

这个问题背后有很多辛辣的历史。 很久很久以前,在一个遥远的星系里,Microsoft被夹在饼干罐里的手上。 当他们还是一家以销售DOS许可证为生的小公司时。 一家名为Stac Electronics的公司想出了一种方法来使DOS更好地工作。 很多机会,磁盘驱动器仍然很慢,处理器越来越快。

Stac提出了一个DOS实用程序,可以自动压缩文件,而DOS不知道这种情况发生了。 在它们写入磁盘之前压缩它们,并在它们被读取时解压缩它们。 DOS只看到文件的未压缩版本。当时非常流行,它使磁盘访问变得更容易 x2。

于是Microsoft说:"好主意!我们也可以这样做"。 并制作了自己的版本,称为DoubleSpace,并在DOS 6.0版本中将其发布给全世界。 斯塔克并不激动,立即死了他们存在的理由,起诉Microsoft。 并赢了。 1.2亿美元。 好痛。 好多。 这相当于为已经售出的DOS的每个副本增加5.50美元的附加费,Microsoft当时已经非常繁重,以确保每台PC都预装DOS,使价格具有吸引力。

Microsoft很难从中恢复过来,压缩在公司很长一段时间内都是一个肮脏的词。 例如,在.NET框架中非常明显,直到最近才一直缺少对.zip存档的支持。

长话短说,他们提出了自己的压缩方案,一种不侵犯任何人专利的方案。 所剩无几,吸得很厉害。 这就是您遇到的问题,MSZIP不是适合它的标签。 您必须运行一个名为expand.exe的程序来解压缩文件,该程序在每个Windows版本上都可用。 键入"展开/?"寻求帮助。 在 superuser.com 上询问更多有关它的问题

一种可能性是导入 cabinet.dll 或 SetupApi.DLL 库并使用extern调用来调用其上的方法。本文讨论该方法。

您将需要这样的原型:

[DllImport("setupapi.dll")]
internal static extern IntPtr SetupDiGetClassDevsEx(IntPtr ClassGuid, 
[MarshalAs(UnmanagedType.LPStr)]String enumerator, 
IntPtr hwndParent, Int32 Flags, IntPtr DeviceInfoSet, 
[MarshalAs(UnmanagedType.LPStr)]String MachineName, IntPtr Reserved);
[DllImport("setupapi.dll")]
internal static extern Int32 SetupDiDestroyDeviceInfoList(IntPtr DeviceInfoSet);

不过,本文并没有专门讨论MSZIP通货紧缩。

另一种可能性可能是使用 7Z SDK,如本 SO 问题中所述。

(应@Stijn的要求)

我的解决方案

如何使用 C# 创建 CAB(内阁)文件

基于WiX的使用,我使用链接中所述的DLL:

Microsoft.部署压缩.dllMicrosoft.Deployment.Compression.Cab.dll

然后我没有使用 CAB 文件,而是将我的文件放在 image.jp_ 中,它运行良好。谢谢大家给我垃圾的问题。

CabInfo cab = new CabInfo(@"C:'test'image.jp_");
cab.Unpack(@"C:'test'");

就我而言,我觉得做起来非常简单,我已经为另一个项目安装了WiX,但您可以非常简单地下载和安装。

然后,您只需转到安装文件夹或找到这些DLL并复制以在我们的应用程序中使用即可。

所有其他解决方案"ZIP"或"GZip"或基于此的库都不起作用。 如果有人有其他解决方案。NET 4.0将非常受欢迎

谢谢