C # Извлечь / Разархивировать файл .EXE - PullRequest
0 голосов
/ 12 ноября 2018

Используя библиотеку 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: Неверная подпись (0x00505A4D) в позиции 0x00000000

Я исследовал дальше, и похоже, что DOTNETZIPне способен обрабатывать .EXE-файлы, так что это действительно имеет смысл.Я попытался переименовать расширение в .ZIP и попытаться разархивировать, и, к сожалению, возникает та же ошибка.

Похоже, что можно извлечь с помощью библиотеки 7ZIP, однако я изо всех сил пытаюсь найти любойправильные примеры в Интернете и те, которые я делаю, не включают возможность ввести пароль, поэтому они бесполезны.

У кого-нибудь есть что-нибудь, что может мне помочь?Будем весьма благодарны за использование другой библиотеки, обходного пути или помощи в понимании библиотеки 7ZIP!

СПАСИБО!

1 Ответ

0 голосов
/ 12 ноября 2018
Файл

.exe - это не zip-файл, это переносимый исполняемый файл .Взгляните на предложения из Синтаксического анализа простого файла Win32 PE (Exe / DLL) в .NET для библиотек, которые могут анализировать файл в какой-либо предварительно обработанной форме, или вы можете просто прочитать его как двоичный файл и извлечьполя, которые вы хотите сами.

...