11

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);

新規: これは私がこれまでに持っているものですが、「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));
4

3 に答える 3

23

.NETプロジェクトからSevenZipSharp.dllを参照し、ビルド後のイベントとして7zDLLがターゲット出力ディレクトリにコピーされていることを確認します。7z.dllは.NETアセンブリではないため、.NETプロジェクトで直接参照することはできません。

「7-zipライブラリをロードできませんまたは内部COMエラー!メッセージ:ライブラリをロードできませんでした」には、2つの一般的な説明があります。

  1. 明らかなのは、7zDLLが見つからないことです。その場合、関連するSevenZipSharp呼び出しを行う前に、DLLのフルパスを使用してSevenZipCompressor / SevenZipExtractor.SetLibraryPath()を呼び出します。相対パスも同様に機能するはずですが、コードによってプロセスの現在のディレクトリが変更された場合に備えて、絶対パスを試してください。絶対パスを取得するための1つの戦略は、実行中のアセンブリのパスを使用することです。例については、以下を参照してください。

  2. 参照されているDLLのアーキテクチャが現在のプロセスと一致していません。たとえば、.NETアセンブリはx64を実行していますが、32ビットバージョンの7z.dllを参照しています。その場合、7z64.dllを参照する必要があります。SevenZipSharpのリリースから7-ZipDLLバイナリをダウンロードして、他の不一致の問題がないことを確認し、正しいバージョンを使用していることを確認します。

7z.dllがそれを使用するアセンブリと同じディレクトリにある場合に、7z.dllの絶対パスを設定する方法の例を次に示します。

SevenZip.SevenZipCompressor.SetLibraryPath(
    Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),  
        "7z.dll"));
于 2011-12-19T19:05:55.887 に答える
1

32 ビット バージョンの .dll を使用している場合は、32 ビット アーキテクチャを優先するようにプロジェクトを設定してみてください。

  - From project properties...   Build  >  check "Prefer 32-bit"
于 2016-09-29T07:08:43.807 に答える
1

SevenZipSharp.dll通常の7za.dllやではなく、 への参照を追加する必要があります7z.dll

7zip dll を使用できるようにする必要があるため、それらをコードと一緒にパッケージ化する必要があります。これは、それらを参照する必要があるという意味ではありません。

ソリューション/プロジェクト フォルダーをアプリケーションに追加し、そこに必要な dll を追加できます。「Copy To Build Directory」プロパティを「Copy if newer」に設定していることを確認してください。

于 2010-06-24T08:18:05.103 に答える