4

我有一个 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\");

谢谢

4

3 回答 3

12

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

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

所以微软走了“好主意!我们也可以做到”。并制作了自己的版本,称为 DoubleSpace,并以 DOS 6.0 版向世界发布。Stac 并不激动,立即死亡并起诉了微软。并荣获。1.2亿美元。那伤害。很多。这相当于为已经售出的每份 DOS 副本增加 5.50 美元的附加费,而当时的微软已经非常重视通过使价格具有吸引力来确保每台 PC 都预装了 DOS。

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

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

于 2013-10-15T00:03:53.703 回答
1

一种可能性是导入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 question中所述。

于 2013-10-14T22:46:15.800 回答
1

(应@Stijn 的要求)

我的解决方案

如何使用 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\");

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

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

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

谢谢

于 2013-10-15T13:48:21.673 回答