Как использовать 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"