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 第一个参数需要是 .7z 文件而不是 .bat 文件。它会“工作”,但是当您尝试运行 sfx.exe 时,它​​会因为它不是有效的 7zip 文件而崩溃。所以你需要先压缩你的文件/目录。

确保 7z.sfx 在您的应用程序目录中,或提供它的路径(它在 codeplex 源下载中)

我首先使用“7zxSD_All.sfx”文件进行了尝试,它提取了该文件,然后 Windows 7 给出了关于它没有正确安装的错误(我假设 Windows 7 认为它是一个安装文件而不是自解压文件)。“7z.sfx”虽然有效。

于 2013-05-03T23:55:29.470 回答