C#提取/解压缩.EXE文件

时间:2018-11-12 17:32:10

标签: c# .net exe unzip

使用DOTNETZIP库,我目前可以使用以下代码解压缩/.ZIP文件:

private void Unzip(object sender, EventArgs e)
{
    string zipPath = pub.DepoDirDaily + @"\";
    string unzipPath = pub.DepoDirDaily + @"\";

    DirectoryInfo efaFiles = new DirectoryInfo(zipPath);
    foreach (var file in efaFiles.GetFiles("*.exe*"))
    {
        if (file.ToString().Contains(pub.YYYMMDD_t0) && file.ToString().Contains(".exe"))
        {
            try
            {
                String FileName = file.ToString().Replace(zipPath, "");
                String FileNameClean = FileName.Replace(".exe", "");
                String OutputDir = unzipPath + FileNameClean;
                String InputDir = zipPath + file;

                ExtractFileToDirectory(InputDir, OutputDir, "password1");
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex);
             }
        }
    }
}

public void ExtractFileToDirectory(string existingZipFile, string outputDirectory, string Password)
{
    try
    {
         ZipFile zip = ZipFile.Read(existingZipFile);
         Directory.CreateDirectory(outputDirectory);

         foreach (ZipEntry e in zip)
         {
             e.Password = Password;
             e.Extract(outputDirectory); 
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
}

但是,当尝试解压缩.EXE文件时,出现以下错误:

Ionic.Zip.ZipException:无法将其读取为ZipFile ---> Ionic.Zip.BadReadException:位置0x00000000处的错误签名(0x00505A4D)

我作了进一步研究,看来DOTNETZIP无法处理.EXE文件,因此这确实有意义。我尝试将扩展名重命名为.ZIP并尝试解压缩,但不幸的是,它出现了相同的错误。

看起来可以使用7ZIP库进行提取,但是我正在努力地在网上找到任何合适的示例,而我所做的却不包括可能包含密码的内容,因此没有用

有人对我有帮助吗? 无论是使用其他库,解决方法还是帮助您理解7ZIP库,都将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

.exe文件不是zip文件,而是portable executable文件。看看Parsing plain Win32 PE File (Exe/DLL) in .NET中关于可以将文件解析为某种预处理形式的库的建议,或者您可以将其阅读为二进制文件并提取所需的字段。