【求助】vb程序通过批处理文件调运java混淆器进行混淆jar文件时,产生拒绝访问错误!经测试证实java混淆器和批处理文件没有问题,只是在对程序自动建立的temp目录下的jar混淆后,无法写入到同样是程序自动建立的work目录内,提示拒绝访问!
请各位帮助指点一下!十万火急!
Public filename As String
Public filedir As String
Public filestring As String
Public FileNameIf As String
Dim OBName As String
Dim AppPath As String ' 设置相对路径变量
'验证程序多次运行声明
Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub manager_Click()
mainLogin.Show
End Sub
Private Sub MDIForm_Load()
'检查程序是否已经运行
If App.PrevInstance Then
MsgBox ("软件已经运行,不能重复打开!"), vbExclamation
Unload Me
Close
End
Exit Sub
End If
Form1.Show
Form1.Width = frmMain.Width
Form1.Height = frmMain.Height - 1150
'获取程序的相对路径
AppPath = App.Path
Dim FolderName As String, fso As New FileSystemObject
FolderName = AppPath & "/work"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
FolderName = AppPath & "/temp"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
End Sub
Private Sub MDIForm_Resize()
Form1.Width = frmMain.Width
Form1.Height = frmMain.Height
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
'删除work目录下所有子目录和文件
Dim FolderName As String, fso As New FileSystemObject
FolderName = AppPath & "/work"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
FolderName = AppPath & "/temp"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
Close
End
End Sub
Private Sub mnuCustomer_Click()
End Sub
Private Sub mnuFactory_Click()
End Sub
Private Sub mnuFileExit_Click()
Unload Me
End Sub
Private Sub mnuHelpAbout_Click()
frmSplash.Show
End Sub
Private Sub mnuInput_Click()
End Sub
Private Sub mnujhcx_Click()
End Sub
Private Sub mnuLogon_Click()
Login.Show
End Sub
Private Sub mnuOutput_Click()
frmoutput.Show
End Sub
Private Sub mnuProduct_Click()
frmDataManager3.Show
End Sub
Private Sub mnuProductInput_Click()
Frmdatamanager4.Show
End Sub
Private Sub mnuReturn_Click()
Frmretreat.Show
End Sub
Private Sub mnuStore_Click()
Frmdatamanager4.Show
End Sub
Private Sub mundataback_Click()
frmbackup.Show
End Sub
Private Sub mnuAbout_Click()
'软件信息界面居中函数
frmSplash.SetFocus
frmSplash.Left = (frmMain.ScaleWidth - frmSplash.Width) / 2
frmSplash.Top = (frmMain.ScaleHeight - frmSplash.Height) / 2
frmSplash.Show
End Sub
Private Sub mnuCopy_Click()
'调用文本复制函数
Clipboard.SetText Form1.Text1.SelText
End Sub
Private Sub mnuOpen_Click()
Call Open_Files
End Sub
Private Sub mnuPase_Click()
'调用文本粘帖函数
Form1.Text1.SelText = Clipboard.GetText()
End Sub
Private Sub mnuReplace_Click()
'调用替换对话框函数
End Sub
Private Sub mnuSeek_Click()
'调用查找对话框函数
End Sub
Private Sub mnuTrim_Click()
'调用文本剪切函数
Clipboard.SetText Form1.Text1.SelText
Form1.Text1.SelText = ""
End Sub
Private Sub munbaocun_Click()
Call Save_Files
End Sub
Private Sub munexits_Click()
Unload Me
Close
End
End Sub
Private Sub munseekku_Click()
frmseekyw.Show
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "打开文件"
Call Open_Files
Case "插入代码"
Case "删除方法"
Case "添加方法"
Case "重写方法"
Case "运行调试"
Case "计 算 器"
Dim RetVal
RetVal = Shell(AppPath & "/tools/calc.exe", 1)
Case "退出系统"
Unload Me
Close
End
End Select
End Sub
Private Sub Open_Files()
CommonDialog1.Filter = "kjava文件(*.jar)|*.jar|"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
Dim NameString As String
filestring = Trim(CommonDialog1.filename)
Call GetFileName(filestring)
If Trim(CommonDialog1.filename) <> "" Then
'将取得的FileName.jar复制到程序根目录下work/temp目录
FileNameIf = Trim(CommonDialog1.filename)
'检测文件FileName是否存在
Dim fso As New FileSystemObject
If fso.FileExists(FileNameIf) = True Then
'检测文件FolderName是否存在
FolderName = AppPath & "/temp/" & filename
If fso.FolderExists(FolderName) = False Then
fso.CreateFolder FolderName
End If
If fso.FolderExists(AppPath & "/work/" & filename & "/") = False Then
fso.CreateFolder AppPath & "/work/" & filename & "/"
End If
If fso.FileExists(AppPath & "/temp/" & filename & "/" & filename) = True Then
fso.DeleteFile AppPath & "/temp/" & filename & "/" & filename
End If
FileCopy CommonDialog1.filename, AppPath & "/temp/" & filename & "/" & filename
'将临时目录temp下的jar文件二次混淆
If fso.FileExists(AppPath & "/work/" & filename & "/" & filename) = True Then
fso.DeleteFile AppPath & "/work/" & filename & "/" & filename
End If
OBName = AppPath & "/ini/ob.txt"
If fso.FileExists(OBName) = True Then
Call GetOB(OBName)
Else
MsgBox "混淆脚本文件丢失!", 0, "错误提示"
End If
'利用jar将工作目录下二次混淆的filename.jar解压缩
'搜索filename.jar解压缩目录下的*.class文件并生成列表显示到文件管理区
Else
MsgBox "当前目录没有" & filename & "文件!", 0, "错误提示"
End If
End If
End Sub
Private Sub Save_Files()
CommonDialog2.filename = filename
CommonDialog2.Filter = "kjava文件(*.jar)|*.jar|"
CommonDialog2.FilterIndex = 2
CommonDialog2.ShowSave
If Trim(CommonDialog2.filename) <> "" Then
'利用winrar将工作目录下的jar解压缩文件重新打包保存至工作目录
'将工作目录内打包后的文件复制另存为用户指定的文件
FileNameIf = Trim(AppPath & "/work/" & filename & "/" & filename)
'检测文件FileName是否存在
Dim fso As New FileSystemObject
If fso.FileExists(FileNameIf) = True Then
FileCopy AppPath & "/work/" & filename & "/" & filename, CommonDialog2.filename
Else
MsgBox "您要打包保存的工程项目不存在!", 0, "错误提示"
End If
End If
End Sub
'获取文件名称
Public Sub GetFileName(filestring)
Dim i As Integer
i = InStrRev(filestring, "/", -1)
filename = Mid(filestring, i + 1, Len(filestring) - i)
End Sub
'获取文件目录
Public Sub GetFileDir(filestring)
Dim i As Integer
i = InStrRev(filestring, "/", -1)
filedir = Mid(filestring, 1, i)
End Sub
'修改生成新的混淆脚本
Public Sub GetOB(OBName)
Dim A, S As String
Dim FreeNum As Integer
FreeNum = FreeFile
Dim fso As New FileSystemObject
If fso.FileExists(AppPath & "/temp/" & filename & "/ob.txt") = True Then
fso.DeleteFile AppPath & "/temp/" & filename & "/ob.txt"
End If
FileCopy OBName, AppPath & "/temp/" & filename & "/ob.txt"
OBName = AppPath & "/temp/" & filename & "/ob.txt"
'打开TXT,input表示以输入方式打开,output或append写入文件
Open OBName For Input As #FreeNum
Do Until EOF(FreeNum) '循环,直到文件结尾。Eof函数用来判断文件是否读完
Line Input #FreeNum, A
S = S + vbNewLine + A 'S用来保存整个文件
Loop
Close FreeNum
S = Replace(S, "JarFile", AppPath & "/temp/" & filename)
S = Replace(S, "outJar", AppPath & "/work/" & filename)
S = Replace(S, "libraryjarsFile", AppPath & "/tools/emptyapi.jar")
'打开TXT,output表示以输出方式打开,写入文件
Open OBName For Output As #FreeNum
Print #FreeNum, S
Close FreeNum
'生成ob混淆脚本
If fso.FileExists(AppPath & "/temp/" & filename & "/ob") = True Then
fso.DeleteFile AppPath & "/temp/" & filename & "/ob"
End If
Dim NewOBName As String
NewOBName = AppPath & "/temp/" & filename & "/ob"
Name OBName As NewOBName
'生成批处理文件.dat
Dim f
Set f = fso.CreateTextFile(AppPath & "/temp/" & filename & "/ob.bat", True)
f.WriteLine ("cd/")
f.WriteLine ("cd " & AppPath & "/tools/")
f.WriteLine ("java -jar proguard.jar @" & AppPath & "/temp/" & filename & "/ob")
f.WriteLine ("pause")
Set f = Nothing
Set fso = Nothing
If Shell(AppPath & "/temp/" & filename & "/" & "ob.bat", vbNormalFocus) <> 0 Then
MsgBox "混淆" & filename & "文件失败,程序将打开原版程序!", 0, "错误提示"
FileCopy CommonDialog1.filename, AppPath & "/work/" & filename & "/" & filename
End If
End Sub
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
请各位帮助指点一下!十万火急!
Public filename As String
Public filedir As String
Public filestring As String
Public FileNameIf As String
Dim OBName As String
Dim AppPath As String ' 设置相对路径变量
'验证程序多次运行声明
Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub manager_Click()
mainLogin.Show
End Sub
Private Sub MDIForm_Load()
'检查程序是否已经运行
If App.PrevInstance Then
MsgBox ("软件已经运行,不能重复打开!"), vbExclamation
Unload Me
Close
End
Exit Sub
End If
Form1.Show
Form1.Width = frmMain.Width
Form1.Height = frmMain.Height - 1150
'获取程序的相对路径
AppPath = App.Path
Dim FolderName As String, fso As New FileSystemObject
FolderName = AppPath & "/work"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
FolderName = AppPath & "/temp"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
End Sub
Private Sub MDIForm_Resize()
Form1.Width = frmMain.Width
Form1.Height = frmMain.Height
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
'删除work目录下所有子目录和文件
Dim FolderName As String, fso As New FileSystemObject
FolderName = AppPath & "/work"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
FolderName = AppPath & "/temp"
If fso.GetFolder(FolderName) <> "" Then
fso.DeleteFolder FolderName
fso.CreateFolder FolderName
End If
Close
End
End Sub
Private Sub mnuCustomer_Click()
End Sub
Private Sub mnuFactory_Click()
End Sub
Private Sub mnuFileExit_Click()
Unload Me
End Sub
Private Sub mnuHelpAbout_Click()
frmSplash.Show
End Sub
Private Sub mnuInput_Click()
End Sub
Private Sub mnujhcx_Click()
End Sub
Private Sub mnuLogon_Click()
Login.Show
End Sub
Private Sub mnuOutput_Click()
frmoutput.Show
End Sub
Private Sub mnuProduct_Click()
frmDataManager3.Show
End Sub
Private Sub mnuProductInput_Click()
Frmdatamanager4.Show
End Sub
Private Sub mnuReturn_Click()
Frmretreat.Show
End Sub
Private Sub mnuStore_Click()
Frmdatamanager4.Show
End Sub
Private Sub mundataback_Click()
frmbackup.Show
End Sub
Private Sub mnuAbout_Click()
'软件信息界面居中函数
frmSplash.SetFocus
frmSplash.Left = (frmMain.ScaleWidth - frmSplash.Width) / 2
frmSplash.Top = (frmMain.ScaleHeight - frmSplash.Height) / 2
frmSplash.Show
End Sub
Private Sub mnuCopy_Click()
'调用文本复制函数
Clipboard.SetText Form1.Text1.SelText
End Sub
Private Sub mnuOpen_Click()
Call Open_Files
End Sub
Private Sub mnuPase_Click()
'调用文本粘帖函数
Form1.Text1.SelText = Clipboard.GetText()
End Sub
Private Sub mnuReplace_Click()
'调用替换对话框函数
End Sub
Private Sub mnuSeek_Click()
'调用查找对话框函数
End Sub
Private Sub mnuTrim_Click()
'调用文本剪切函数
Clipboard.SetText Form1.Text1.SelText
Form1.Text1.SelText = ""
End Sub
Private Sub munbaocun_Click()
Call Save_Files
End Sub
Private Sub munexits_Click()
Unload Me
Close
End
End Sub
Private Sub munseekku_Click()
frmseekyw.Show
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "打开文件"
Call Open_Files
Case "插入代码"
Case "删除方法"
Case "添加方法"
Case "重写方法"
Case "运行调试"
Case "计 算 器"
Dim RetVal
RetVal = Shell(AppPath & "/tools/calc.exe", 1)
Case "退出系统"
Unload Me
Close
End
End Select
End Sub
Private Sub Open_Files()
CommonDialog1.Filter = "kjava文件(*.jar)|*.jar|"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
Dim NameString As String
filestring = Trim(CommonDialog1.filename)
Call GetFileName(filestring)
If Trim(CommonDialog1.filename) <> "" Then
'将取得的FileName.jar复制到程序根目录下work/temp目录
FileNameIf = Trim(CommonDialog1.filename)
'检测文件FileName是否存在
Dim fso As New FileSystemObject
If fso.FileExists(FileNameIf) = True Then
'检测文件FolderName是否存在
FolderName = AppPath & "/temp/" & filename
If fso.FolderExists(FolderName) = False Then
fso.CreateFolder FolderName
End If
If fso.FolderExists(AppPath & "/work/" & filename & "/") = False Then
fso.CreateFolder AppPath & "/work/" & filename & "/"
End If
If fso.FileExists(AppPath & "/temp/" & filename & "/" & filename) = True Then
fso.DeleteFile AppPath & "/temp/" & filename & "/" & filename
End If
FileCopy CommonDialog1.filename, AppPath & "/temp/" & filename & "/" & filename
'将临时目录temp下的jar文件二次混淆
If fso.FileExists(AppPath & "/work/" & filename & "/" & filename) = True Then
fso.DeleteFile AppPath & "/work/" & filename & "/" & filename
End If
OBName = AppPath & "/ini/ob.txt"
If fso.FileExists(OBName) = True Then
Call GetOB(OBName)
Else
MsgBox "混淆脚本文件丢失!", 0, "错误提示"
End If
'利用jar将工作目录下二次混淆的filename.jar解压缩
'搜索filename.jar解压缩目录下的*.class文件并生成列表显示到文件管理区
Else
MsgBox "当前目录没有" & filename & "文件!", 0, "错误提示"
End If
End If
End Sub
Private Sub Save_Files()
CommonDialog2.filename = filename
CommonDialog2.Filter = "kjava文件(*.jar)|*.jar|"
CommonDialog2.FilterIndex = 2
CommonDialog2.ShowSave
If Trim(CommonDialog2.filename) <> "" Then
'利用winrar将工作目录下的jar解压缩文件重新打包保存至工作目录
'将工作目录内打包后的文件复制另存为用户指定的文件
FileNameIf = Trim(AppPath & "/work/" & filename & "/" & filename)
'检测文件FileName是否存在
Dim fso As New FileSystemObject
If fso.FileExists(FileNameIf) = True Then
FileCopy AppPath & "/work/" & filename & "/" & filename, CommonDialog2.filename
Else
MsgBox "您要打包保存的工程项目不存在!", 0, "错误提示"
End If
End If
End Sub
'获取文件名称
Public Sub GetFileName(filestring)
Dim i As Integer
i = InStrRev(filestring, "/", -1)
filename = Mid(filestring, i + 1, Len(filestring) - i)
End Sub
'获取文件目录
Public Sub GetFileDir(filestring)
Dim i As Integer
i = InStrRev(filestring, "/", -1)
filedir = Mid(filestring, 1, i)
End Sub
'修改生成新的混淆脚本
Public Sub GetOB(OBName)
Dim A, S As String
Dim FreeNum As Integer
FreeNum = FreeFile
Dim fso As New FileSystemObject
If fso.FileExists(AppPath & "/temp/" & filename & "/ob.txt") = True Then
fso.DeleteFile AppPath & "/temp/" & filename & "/ob.txt"
End If
FileCopy OBName, AppPath & "/temp/" & filename & "/ob.txt"
OBName = AppPath & "/temp/" & filename & "/ob.txt"
'打开TXT,input表示以输入方式打开,output或append写入文件
Open OBName For Input As #FreeNum
Do Until EOF(FreeNum) '循环,直到文件结尾。Eof函数用来判断文件是否读完
Line Input #FreeNum, A
S = S + vbNewLine + A 'S用来保存整个文件
Loop
Close FreeNum
S = Replace(S, "JarFile", AppPath & "/temp/" & filename)
S = Replace(S, "outJar", AppPath & "/work/" & filename)
S = Replace(S, "libraryjarsFile", AppPath & "/tools/emptyapi.jar")
'打开TXT,output表示以输出方式打开,写入文件
Open OBName For Output As #FreeNum
Print #FreeNum, S
Close FreeNum
'生成ob混淆脚本
If fso.FileExists(AppPath & "/temp/" & filename & "/ob") = True Then
fso.DeleteFile AppPath & "/temp/" & filename & "/ob"
End If
Dim NewOBName As String
NewOBName = AppPath & "/temp/" & filename & "/ob"
Name OBName As NewOBName
'生成批处理文件.dat
Dim f
Set f = fso.CreateTextFile(AppPath & "/temp/" & filename & "/ob.bat", True)
f.WriteLine ("cd/")
f.WriteLine ("cd " & AppPath & "/tools/")
f.WriteLine ("java -jar proguard.jar @" & AppPath & "/temp/" & filename & "/ob")
f.WriteLine ("pause")
Set f = Nothing
Set fso = Nothing
If Shell(AppPath & "/temp/" & filename & "/" & "ob.bat", vbNormalFocus) <> 0 Then
MsgBox "混淆" & filename & "文件失败,程序将打开原版程序!", 0, "错误提示"
FileCopy CommonDialog1.filename, AppPath & "/work/" & filename & "/" & filename
End If
End Sub
<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>