我将了解如何使用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:testfile.bat", "C:7zSFX.exe")
End Sub
End Class
更新:
@For Everyone:
请我祈祷有人会回答我的问题,至少你曾经创建一个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:Tempcc_seal.7z", "C:Tempsfxseal.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:Tempcc_seal.7z", "C:Tempsfxseal.exe")
End Sub
它也为我工作没有错误。取出ModuleFileName行,我得到了和你一样的崩溃。
还要注意压缩器。MakeSfx的第一个参数需要是。7z文件,而不是。bat文件。它会"工作",但当你试图运行sfx.exe时,它会崩溃,因为它不是一个有效的7zip文件。所以你需要先压缩你的文件/目录。
确保7z。SFX在您的应用程序目录中,或者提供它的路径(它在codeplex源代码下载中)
我尝试了"7zxSD_All"。sfx"文件,它首先提取文件,然后Windows 7给出一个错误,关于它没有被正确安装(我假设Windows 7认为这是一个安装文件,而不是一个自提取文件)。"7 z。
你可能使用的是Windows 8,所以为了给你的应用程序足够的权限来写修改(C:)分区,即使你是管理员,你也应该以"作为管理员"模式运行应用程序。