如何用C#解压exe文件

时间:2020-12-07 08:05:18
在windows explorer中可以点击右键利用winzip或winrar解压该EXE文件,但利用ICSharpCode.SharpZipLib.Zip在代码中解压确失败,请高手指点:

部分代码如下:
public void UnzipFiles(string SourceZip, string DesPath, bool cover)
        {
            ZipInputStream stream = new ZipInputStream(File.OpenRead(SourceZip));
            ZipEntry theEntry;
            if (!Directory.Exists(DesPath)) 
                Directory.CreateDirectory(DesPath);
             if (DesPath[DesPath.Length - 1] != Path.DirectorySeparatorChar)
                 DesPath += Path.DirectorySeparatorChar;
             while ((theEntry = stream.GetNextEntry()) != null)
            {
               。。。
            }
         }

红色部分抛出异常:Wrong Local header signature: 0x905A4D
我想这是因为解压的文件是EXE,而非ZIP导致的,但如何解决呢?

15 个解决方案

#1


该回复于2008-06-10 14:41:09被版主删除

#2


直接把EXE改成ZIP,呵呵,不知道行不行

#3


那是exe呀,不是zip压缩格式。

#5


引用 2 楼 kbryant 的回复:
直接把EXE改成ZIP,呵呵,不知道行不行


这个方法我也想到了,不行的,直接用winzip都打不开

#6


引用 3 楼 akirya 的回复:
那是exe呀,不是zip压缩格式。


是EXE,但是一个安装包,可以手动用winzip/winrar解压的。

#7


EXE压缩的格式不是zip,算法不同。。。

#8


引用 6 楼 fanxuehai 的回复:
引用 3 楼 akirya 的回复:
那是exe呀,不是zip压缩格式。 
 

是EXE,但是一个安装包,可以手动用winzip/winrar解压的。

那是打包出来的自解压格式,winzip和winrar可以识别这种exe的内容,只解压出来数据,跳过exe本身的数据。
你可以研究一下这种exe的格式数据,然后也跳过exe的数据直接解压缩内容。

你可以搜索一下7z开源的压缩解压缩,也有这个功能。

#9


up

#10


lz说的是winrar制作的自解压文件或者是用windows自带的iexpress打包cab的exe吧  这两种exe可以拿winrar打开

#11



        //第一个参数是可执行文件路径和文件名,第二个是参数比如:-o c:\extract ...
        private void RunCmd(string ExeName, string Args) {
            

            Process p = new Process();
            p.StartInfo.FileName = ExeName;
            p.StartInfo.Arguments = Args;
            p.StartInfo.UseShellExecute = false;        
            p.StartInfo.RedirectStandardInput = true;   
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;   
            //后台执行。
            p.StartInfo.CreateNoWindow = true;

            p.Start();
        }

#12


8楼说的有道理。

#13


关注!!!!!!!!!!!!!!!!!!!!!

#14


如果exe文件是rar的自解压:
在exe文件中搜索  “ Rar!”字符串,从“Rar!”开始到文件结束的文件都是rar的压缩包内容。前面的都是自解压模块。
所以,把从“Rar!”开始到文件结束的内容全部拷贝到另外一个临时文件里,然后对临时文件进行操作就OK了。
如果exe文件是rar的自解压:
只要只要搜索“ PK ?”即可。( ?不确定此字符。)

注:“Rar!” “PK?”最好自己用16进制打开rar、zip压缩包看看,前面那几个字符到底对应的是哪几个编码。因为我是直接用记事本打开看的。

#15


EXE是由installshield打包的,由于时间有限,没有太多时间去研究,再加上这个只是一个公司内部使用的工具,所以直接用process启动WINRAR.exe进行解压。谢谢大家的解答,现在结贴,散分:)

#1


该回复于2008-06-10 14:41:09被版主删除

#2


直接把EXE改成ZIP,呵呵,不知道行不行

#3


那是exe呀,不是zip压缩格式。

#4


#5


引用 2 楼 kbryant 的回复:
直接把EXE改成ZIP,呵呵,不知道行不行


这个方法我也想到了,不行的,直接用winzip都打不开

#6


引用 3 楼 akirya 的回复:
那是exe呀,不是zip压缩格式。


是EXE,但是一个安装包,可以手动用winzip/winrar解压的。

#7


EXE压缩的格式不是zip,算法不同。。。

#8


引用 6 楼 fanxuehai 的回复:
引用 3 楼 akirya 的回复:
那是exe呀,不是zip压缩格式。 
 

是EXE,但是一个安装包,可以手动用winzip/winrar解压的。

那是打包出来的自解压格式,winzip和winrar可以识别这种exe的内容,只解压出来数据,跳过exe本身的数据。
你可以研究一下这种exe的格式数据,然后也跳过exe的数据直接解压缩内容。

你可以搜索一下7z开源的压缩解压缩,也有这个功能。

#9


up

#10


lz说的是winrar制作的自解压文件或者是用windows自带的iexpress打包cab的exe吧  这两种exe可以拿winrar打开

#11



        //第一个参数是可执行文件路径和文件名,第二个是参数比如:-o c:\extract ...
        private void RunCmd(string ExeName, string Args) {
            

            Process p = new Process();
            p.StartInfo.FileName = ExeName;
            p.StartInfo.Arguments = Args;
            p.StartInfo.UseShellExecute = false;        
            p.StartInfo.RedirectStandardInput = true;   
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;   
            //后台执行。
            p.StartInfo.CreateNoWindow = true;

            p.Start();
        }

#12


8楼说的有道理。

#13


关注!!!!!!!!!!!!!!!!!!!!!

#14


如果exe文件是rar的自解压:
在exe文件中搜索  “ Rar!”字符串,从“Rar!”开始到文件结束的文件都是rar的压缩包内容。前面的都是自解压模块。
所以,把从“Rar!”开始到文件结束的内容全部拷贝到另外一个临时文件里,然后对临时文件进行操作就OK了。
如果exe文件是rar的自解压:
只要只要搜索“ PK ?”即可。( ?不确定此字符。)

注:“Rar!” “PK?”最好自己用16进制打开rar、zip压缩包看看,前面那几个字符到底对应的是哪几个编码。因为我是直接用记事本打开看的。

#15


EXE是由installshield打包的,由于时间有限,没有太多时间去研究,再加上这个只是一个公司内部使用的工具,所以直接用process启动WINRAR.exe进行解压。谢谢大家的解答,现在结贴,散分:)