3

SevenZipSharp ライブラリを使用して SFX を作成する方法を理解します。

まず、圧縮レベルを設定するためのプロパティが見つかりません。

ファイルの SFX を作成しようとすると、次のエラーが発生します。

"Object reference not set to an instance of an object."

フォルダの SFX を作成しようとすると、次のエラーが発生します。

"Access to the path 'C:\test' is denied."

(しかし、真実ではありません。私は管理者であり、より利用可能なフォルダーでテストしました...)

これは、私がこのすべてを理解しようとしている完全なクラスです...:

Imports SevenZip

Public Class Form1

Dim dll As String = "7z64.dll"

Private Function SevenZipSharp_Compress_SFX(ByVal Input_DirOrFile As String, _
                                            ByVal OutputFileName As String) As Boolean
    Try
        ' Set library path
        SevenZipCompressor.SetLibraryPath(dll)

        ' Create compressor
        Dim Compressor As SevenZipSfx = New SevenZipSfx(SfxModule.Default)

        ' Set SFX parameters
        ' ¿?

        ' Start compression
        Compressor.MakeSfx(Input_DirOrFile, OutputFileName)

    Catch ex As Exception
        'Return False ' File not compressed
        Throw New Exception(ex.Message)
    End Try

    Return True ' File compressed

End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SevenZipSharp_Compress_SFX("C:\test\file.bat", "C:\7zSFX.exe")
End Sub

End Class

アップデート:

@すべての人のために:

誰かが私の質問に答えてくれることを祈ってください。少なくとも SFX SevenZipSharp を作成して、私が間違っていることとそれを修正する方法を教えてください。ユーザー許可の問題であると言うために答えないでください。コメントを読んでください。 .

4

2 に答える 2

2

おそらく Windows 8 を使用しているので、アプリケーションに (C:) パーティションへの書き込み変更に十分な権限を与えるには、管理者であってもアプリケーションを「管理者として」モードで実行する必要があります。

于 2013-05-03T08:13:53.543 に答える
2

引数がどうあるべきかについて混乱があるようです。次のコードは、 codeplex の最新の SevenZipSharp コードで機能しました。

    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim compressor As SevenZipSfx = New SevenZipSfx("7z.sfx")
        compressor.MakeSfx("C:\Temp\cc_seal.7z", "C:\Temp\sfxseal.exe")
    End Sub

あなたの例のように SevenZipSfx(SfxModule.Default) を試してみましたが、モジュール名が設定されていなかったので、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生したと思います。これ:

    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim compressor As SevenZipSfx = New SevenZipSfx(SfxModule.Default)
        compressor.ModuleFileName = "7z.sfx"
        compressor.MakeSfx("C:\Temp\cc_seal.7z", "C:\Temp\sfxseal.exe")
    End Sub

また、エラーなしで機能しました。ModuleFileName 行を取り出すと、あなたと同じクラッシュが発生しました。

また、compressor.MakeSfx の最初の引数は、.bat ファイルではなく、.7z ファイルである必要があることに注意してください。これは「動作」しますが、sfx.exe を実行しようとすると、有効な 7zip ファイルではないという理由でクラッシュします。そのため、最初にファイル/ディレクトリを圧縮する必要があります。

アプリケーション ディレクトリに 7z.sfx があることを確認するか、そのパスを指定します (コードプレックス ソース ダウンロードにあります)。

最初に「7zxSD_All.sfx」ファイルで試してみると、ファイルが抽出され、Windows 7 が正しくインストールされていないというエラーが表示されます (Windows 7 は、自己解凍ファイルではなくインストール ファイルと見なしていると思います)。ただし、「7z.sfx」は機能しました。

于 2013-05-03T23:55:29.470 に答える