.net - 如何使用 SevenZipSharp 创建压缩的 SFX 文件?

标签 .net vb.net visual-studio 7zip sevenzipsharp

我将了解如何使用 SevenZipSharp 库创建 SFX。

首先,我需要说明的是,我找不到任何属性来设置压缩级别,等等。

当我尝试制作文件的 SFX 时,出现此错误:

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

如果我尝试制作文件夹的 SFX,我会收到此错误:

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

(但这不是真的,我是管理员,我已经用更多可用文件夹对其进行了测试...)

这是我试图理解所有这些的完整类(class)......:

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

UPDATE:

@对于所有人:

请我祈祷有人能回答我的问题至少你曾经创建过一个 SFX SevenZipSharp 来告诉我我做错了什么以及如何解决它,而不是回答说他们是用户权限问题,拜托阅读评论。

最佳答案

看起来对于参数应该是什么可能存在一些混淆。以下代码对我有用 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”虽然有效。

关于.net - 如何使用 SevenZipSharp 创建压缩的 SFX 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069470/

相关文章:

c# - 使用 Serilog 写入结构化日志

c# - Paint.NET 风格的工具窗口

html - 在 VB 中使用 WebBrowser 对象打开生成的网页

c# - 使用自定义成员资格提供程序扩展 MembershipUser 类

c# - 如何创建列表列表并向其添加项目然后读回这些项目?

c# - 在没有第 3 方库的情况下在 .NET 中刻录(视频)DVD

c# - 如何从 VB.net(或 C#)调用 sql server 函数?有存储过程之类的语法吗?

c# - 将分支名称获取到代码中

javascript - Visual Studio - 如何显示自动完成建议?

.net - Entity Framework 错误 - "The EntityContainer name must be unique"