我有一个VB6应用程序的安装程序,我需要使用c#
单独解压缩文件。所有文件都以下划线结尾,例如image.jp_
。我在7ZIP程序中看到文件是用MSZIP压缩模式压缩的,但我无法解压缩。
修改
我的解决方案
How to create a CAB (cabinet) file using C#
Microsoft.Deployment.Compression.dll
Microsoft.Deployment.Compression.Cab.dll
然后我没有使用CAB文件,而是放置了我的文件image.jp_
,它完美无缺。
谢谢大家把这个问题丢给我,而查理,我很感激地说谢谢
CabInfo cab = new CabInfo(@"C:\test\image.jp_");
cab.Unpack(@"C:\test\");
感谢
答案 0 :(得分:11)
这个问题背后有很多辛辣的历史。很久很久以前,在一个遥远的星系中,微软被他们的手抓住了。当他们仍然是一家以销售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版本。输入“expand /?”求助。在superuser.com上提出更多相关问题
答案 1 :(得分:1)
一种可能性是导入cabinet.dll或SetupApi.DLL库并使用extern
调用来调用它上面的方法。 This article讨论了这种方法。
你需要这样的原型:
[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中所述。
答案 2 :(得分:0)
(应@Stijn的要求)
我的解决方案
How to create a CAB (cabinet) file using C#
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将非常受欢迎
感谢