我如何使用Sevenzipsharp这段代码?

时间:2010-06-24 08:10:46

标签: c# 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));

3 个答案:

答案 0 :(得分:22)

从.NET项目中引用SevenZipSharp.dll,并确保将7z DLL作为构建后事件复制到目标输出目录。由于7z.dll不是.NET程序集,因此.NET项目无法直接引用它。

“无法加载7-zip库或内部COM错误有两种典型解释!消息:无法加载库”:

  1. 显而易见的是找不到7z DLL。在这种情况下,在进行任何相关的SevenZipSharp调用之前,使用DLL的完整路径调用SevenZipCompressor / SevenZipExtractor.SetLibraryPath()。相对路径也应该起作用,但是如果某些代码更改了进程的当前目录,请尝试绝对路径。获取绝对路径的一种策略是使用执行程序集的路径,请参阅下面的示例。

  2. 被引用的DLL的体系结构与当前进程不匹配。例如,您的.NET程序集正在运行x64,但您引用的是32位版本的7z.dll。在这种情况下,您需要引用7z64.dll。从SevenZipSharp的release下载7-Zip DLL二进制文件,以确保没有其他不匹配问题,并确保使用正确的版本。

  3. 下面是一个如何设置7z.dll的绝对路径的示例,如果它与使用它的程序集在同一目录中:

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

答案 1 :(得分:1)

您需要添加SevenZipSharp.dll的引用,而不是常规7za.dll7z.dll

由于您需要提供7zip dll,因此需要使用代码打包它们 - 这并不意味着您需要引用它们。

您可以将解决方案/项目文件夹添加到您的应用程序,并在那里添加所需的dll。确保将“Copy To Build Directory”属性设置为“Copy if Newer”。

答案 2 :(得分:1)

如果您使用的是32位版本的.dll,则可以尝试将项目设置为更喜欢32位架构。

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