Невозможно прочитать это как ZipFile для файла .exe С#

Я использую файлы библиотеки SevenZIP для распаковки/распаковки файла .exe. Когда я попробовал этот подход, я получаю сообщение об ошибке Cannot read that as a ZipFile и zip exception was unhanded. Я не хочу использовать какое-либо консольное приложение 7zip.exe в своем проекте и предпочитаю использовать файлы .dll в своем проекте.

Есть ли другой способ извлечь файл .exe?

  private void MyExtract()
    {
        if(x86)
            ExtractZip(@"D:\22.1.2.702\64\953-win_x86.exe", ".");
        else
            ExtractZip(@"D:\22.1.2.702\64\.702-win_x64.exe", ".");
    }

    private void ExtractZip(string zipFile, string directory)
    {
        using (var zip1 = ZipFile.Read(zipFile))
        {
            // here, we extract every entry, but we could extract conditionally
            // based on entry name, size, date, checkbox status, etc.  
            foreach (var e in zip1)
            {
            e.Extract(directory, ExtractExistingFileAction.OverwriteSilently);
            }
        }
    }

person linguini    schedule 26.07.2012    source источник
comment
Существуют ли какие-либо вызовы API, которые принимают поток, а не весь файл? Вам нужно либо проанализировать заголовки .exe, чтобы выяснить, где заканчивается последний раздел (и, следовательно, где начинается .zip), либо искать в файле, пока не найдете .zip magic PK\x03\x04 затем передайте остальную часть файла в API — или .7z magic, если вы используете этот формат вместо этого .   -  person Rup    schedule 26.07.2012
comment
Я был удивлен тем, что когда я перетаскивал свой исполняемый файл в WinZip и извлекал его вручную, он работал без проблем.   -  person linguini    schedule 26.07.2012


Ответы (2)


Пример кода выглядит так, как будто вы используете DotNetZip, а не SevenZipLib. DotNetZip может извлекать только файлы .zip, но не 7-zip и не .exe.

person ipavlic    schedule 26.07.2012
comment
: В этой ссылке есть пример архивирования exe-файла, но нет извлечения fexe-файла. ‹dotnetzip.codeplex.com/wikipage?title=CS-Examples - person linguini; 26.07.2012

Вместо использования SevenZip lib попробуйте 7zip.exe в консоли. Используйте класс Process для запуска 7zip.exe. Он работает идеально.

person Nickon    schedule 26.07.2012
comment
Но он сказал, что не хочет этого делать, не так ли? Использование библиотеки даст другие преимущества, например. потоковую передачу данных без необходимости записи во временное хранилище. - person Rup; 26.07.2012