Как использовать Sevenzipsharp с этим кодом?

iv пробовал много разных способов заставить это работать, и я получил его для работы, но я не могу получить WaitForExit(); работать так, как они здесь... так как бы я конвертировал это для работы с sevenzip? потому что я не могу заставить его работать, а также я SFX пароль, так что они не могут быть доступны, кроме как с помощью программы, а также для добавления 7z.DLL я не могу его добавить, потому что я получаю ошибку:

Ссылка на 7za.dll не может быть добавлена. убедитесь, что файл доступен, и что он является допустимым компонентом сборки или COM.

string tempFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
System.Diagnostics.Process defrag1 = System.Diagnostics.Process.Start(@"AusLogics_Defrag.exe", string.Format(" -o{0} -y -Pthisisthepass", tempFolder));
defrag1.WaitForExit();
string executableDirectoryName = Path.GetDirectoryName(Application.ExecutablePath);
System.Diagnostics.Process defrag2 = System.Diagnostics.Process.Start(tempFolder + "\\" + "AusLogics_Defrag" + "\\" + "DiskDefrag.exe", "");
defrag2.WaitForExit();
System.IO.Directory.Delete(tempFolder + "\\" + "AusLogics_Defrag", true);

new: хорошо, это то, что у меня есть до сих пор, но я получаю эту ошибку "Не могу загрузить 7-zip-библиотеку или внутреннюю COM-ошибку! Сообщение: не удалось загрузить библиотеку"

SevenZipExtractor.SetLibraryPath("7z.dll"); //no idea of this is needed or not
SevenZipCompressor.SetLibraryPath("7z.dll"); //no idea of this is needed or not
string tempFolder = Environment.GerFolderPath(Environment.SpecialFolder.ApplicationData);
SevenZipExtractor defrag = new SevenZipExtractor(@"Programs\Optimize\Auslogics_Defrag.7z");
defrag.ExtracArchive(string.Format("-o{0} -y -PThisisthepass", tempFolder));

Ответ 1

Ссылка SevenZipSharp.dll из вашего проекта .NET и убедитесь, что у вас есть DLL 7z, скопированная в целевой выходной каталог как событие после сборки. Поскольку 7z.dll не является сборкой .NET, ваш проект .NET не может ссылаться на него напрямую.

Существует два типичных объяснения: "Невозможно загрузить 7-zip-библиотеку или внутреннюю COM-ошибку! Сообщение: не удалось загрузить библиотеку":

  • Очевидным является то, что 7z DLL не может быть найдена. В этом случае вызовите SevenZipCompressor/SevenZipExtractor.SetLibraryPath() с полным путем DLL перед выполнением любых связанных вызовов SevenZipSharp. Относительные пути также должны работать, но попробуйте абсолют, если какой-то код изменит текущий каталог процесса. Одной из стратегий получения абсолютного пути является использование пути исполняющей сборки, см. Ниже пример.

  • Архитектура ссылающейся DLL не соответствует текущему процессу. Например, ваша сборка .NET работает с x64, но вы ссылаетесь на 32-разрядную версию 7z.dll. В этом случае вам нужно будет ссылаться на 7z64.dll. Загрузите двоичные файлы 7-Zip DLL из SevenZipSharp release, чтобы убедиться, что нет других проблем с рассогласованием и убедитесь, что вы используете правильную версию.

Вот пример того, как установить абсолютный путь для 7z.dll, если он в том же каталоге, что и сборка, используя его:

SevenZip.SevenZipCompressor.SetLibraryPath(
    Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),  
        "7z.dll"));

Ответ 2

Вам нужно добавить ссылку на SevenZipSharp.dll, а не на обычный 7za.dll или 7z.dll.

Поскольку вам нужно иметь 7zip dll, вам нужно упаковать их вместе с кодом - это не значит, что вам нужно ссылаться на них.

Вы можете добавить папку решения/проекта в свое приложение и добавить туда необходимую DLL. Убедитесь, что вы установили для свойства "Копировать в сборку" значение "Копировать, если новый".

Ответ 3

Если вы используете 32-разрядную версию DLL, вы можете попробовать настроить проект на 32-битную архитектуру.

  - From project properties...   Build  >  check "Prefer 32-bit"