为什么这个run不起作用了【已解决】
本帖最后由 fenhanxue 于 2013-5-8 23:59 编辑虽然不知道原因,但解决方案是这样的:
把FileWrite、FileRead、等这些函数,文件名全部用文件句柄替换,用文件名会出错。。。虽然不知道为什么。。。
求助,myscript.au3这段代码的run为什么没反应?
文件打包上传,
文件树结构为:
一级目录:文件夹“test”
二级目录:myscript.au3和文件夹“测试”
三级目录:程序Obfuscator.exe 和test.au3
其中,Obfuscator.exe 即autoit论坛中文版自带的代码迷惑工具(位置:D:\autoit3\SciTe\Obfuscator)
想实现的效果为:
1、运行myscript.au3
2、自动在测试 文件下生成一个BAT
(并给BAT写入功能:运行Obfuscator.exe对test.au3这个程序进行代码迷惑)
3、运行这个BAT然后删除这个BAT
其他代码为:;test.au3代码
MsgBox(0,"","test");myscript.au3 代码为
#Include <File.au3>
Dim $inew="测试";自己设置的一个目录
;目录下生产一个bat文件,bat的内容为:对test.au3进行代码迷惑
_FileCreate(@ScriptDir&"\"&$inew&"\Ob.bat")
FileOpen(@ScriptDir&"\"&$inew&"\Ob.bat",2)
FileWrite(@ScriptDir&"\"&$inew&"\Ob.bat",@ScriptDir&"\"&$inew&"\Obfuscator.exe "&@ScriptDir&"\"&$inew&"\test.au3")
FileClose(@ScriptDir&"\"&$inew&"\Ob.bat")
Run(@ScriptDir&"\"&$inew&"\Ob.bat");运行bat,但是貌似没反应。。。不知道为什么?
FileDelete(@ScriptDir&"\"&$inew&"\Ob.bat");删除bat runwait
等运行完 bat
再去FileDelete fileclose 后面需要加入一点延迟时间, 不然执行 run 时,该文件还没出现呢,当然没反应! 回复 3# user3000
加了延时,还是没反应{:face (319):}#Include <File.au3>
Dim $inew="测试";自己设置的一个目录
;目录下生产一个bat文件,bat的内容为:对test.au3进行代码迷惑
_FileCreate(@ScriptDir&"\"&$inew&"\Ob.bat")
FileOpen(@ScriptDir&"\"&$inew&"\Ob.bat",2)
FileWrite(@ScriptDir&"\"&$inew&"\Ob.bat",@ScriptDir&"\"&$inew&"\Obfuscator.exe "&@ScriptDir&"\"&$inew&"\test.au3")
FileClose(@ScriptDir&"\"&$inew&"\Ob.bat")
Sleep(5000)
Run(@ScriptDir&"\"&$inew&"\Ob.bat");运行bat,但是貌似没反应。。。不知道为什么? 回复 2# veket_linux
尝试了以下几种方案的组合,run 这里 都没反应{:face (245):}
1、去掉FileDelete这段语句,也就是不删除BAT
2、run 改成 runwait
3、run前面加一行:sleep(5000)
帮忙诊断下究竟是为什么呀
求助,myscript.au3这段代码的run为什么没反应?
求助,myscript.au3这段代码的run为什么没反应?文件打包上传,
文件树结构为:
一级目录:文件夹“test”
二级目录:myscript.au3和文件夹“测试”
三级目录:程序Obfuscator.exe 和test.au3
其中,Obfuscator.exe 即autoit论坛中文版自带的代码迷惑工具(位置:D:\autoit3\SciTe\Obfuscator)
想实现的效果为:
1、运行myscript.au3
2、自动在测试 文件下生成一个BAT
(并给BAT写入功能:运行Obfuscator.exe对test.au3这个程序进行代码迷惑)
3、运行这个BAT然后删除这个BAT
其他代码为:;test.au3代码
MsgBox(0,"","test");myscript.au3 代码为
#Include <File.au3>
Dim $inew="测试";自己设置的一个目录
;目录下生产一个bat文件,bat的内容为:对test.au3进行代码迷惑
_FileCreate(@ScriptDir&"\"&$inew&"\Ob.bat")
FileOpen(@ScriptDir&"\"&$inew&"\Ob.bat",2)
FileWrite(@ScriptDir&"\"&$inew&"\Ob.bat",@ScriptDir&"\"&$inew&"\Obfuscator.exe "&@ScriptDir&"\"&$inew&"\test.au3")
FileClose(@ScriptDir&"\"&$inew&"\Ob.bat")
Run(@ScriptDir&"\"&$inew&"\Ob.bat");运行bat,但是貌似没反应。。。不知道为什么?
FileDelete(@ScriptDir&"\"&$inew&"\Ob.bat");删除bat尝试过以下三种方案,都不行哇:
回复 2# veket_linux
尝试了以下几种方案的组合,run 这里 都没反应
1、去掉FileDelete这段语句,也就是不删除BAT
2、run 改成 runwait
3、run前面加一行:sleep(5000)
高手帮忙这诊断哇 可以直接 Run('Obfuscator.exe'),干嘛还Run(bat) 呢 回复 2# afan
直接run也是遇到了类似的问题,也是run没反应,所以才折中到现在的代码,
然后现在的代码,这个run也怎么都没反应哇,斑斑帮忙诊断{:face (229):} 如果你非得生成 bat 文件那就需要修改错误:
FileWrite(这里应该是FileOpen返回的句柄, xxx)
FileClose(这里应该是FileOpen返回的句柄)Local $sFAu3Dir = @ScriptDir & '\测试'
Local $FDat = $sFAu3Dir & '\Ob.bat'
Local $hFO = FileOpen($FDat, 2 + 8)
FileWrite($hFO, '"' & $sFAu3Dir & '\Obfuscator.exe" "' & $sFAu3Dir & '\test.au3"')
FileClose($hFO)
Run($FDat)当然,直接Run无疑更好Local $sWorkDir = @ScriptDir & '\测试'
Local $ExitCode = RunWait('"' & $sWorkDir & '\Obfuscator.exe" "' & $sWorkDir & '\test.au3"', '', 0)
MsgBox(64, $ExitCode, '完成') 回复 5# fenhanxue
添加 工作目录?因为你所有的脚本都没有指定 工作目录
试试 工作目录太烦人了 回复 4# fenhanxue
改自你的代码,工作原理完全一样. 在win7 64 位下成功迷惑了 test.au3;myscript.au3 代码为
Local $wDir = @ScriptDir & "\test\";自己设置的一个目录
Local $bat = $wDir & 'test.bat'
Local $str = $wDir & 'Obfuscator.exe ' & $wDir & 'test.au3'
$str &= @CRLF & 'pause'
;目录下生产一个bat文件,bat的内容为:对test.au3进行代码迷惑
If FileExists($bat) Then FileDelete($bat)
FileWrite($bat, $str)
Sleep(500)
RunWait($bat)
FileDelete($bat);删除bat 回复 12# user3000
恩恩,可以使用,可是很想知道我自己的代码,问题到底出现在哪里啦? 回复user3000
恩恩,可以使用,可是很想知道我自己的代码,问题到底出现在哪里啦?
fenhanxue 发表于 2013-5-8 19:02 http://www.autoitx.com/images/common/back.gif
9#那么多字你没看? 本帖最后由 fenhanxue 于 2013-5-8 21:12 编辑
回复 14# afan
亲,我不知道是不是自己电脑的问题,比如说您指导我的这三行代码Local $sWorkDir = @ScriptDir & '\测试'
Local $ExitCode = RunWait('"' & $sWorkDir & '\Obfuscator.exe" "' & $sWorkDir & '\test.au3"', '', 0)
MsgBox(64, $ExitCode, '完成')出现了一个奇怪的现象:
一、我直接用这三行代码重新建一个au3,可以顺利运行
二、当我把这三行加到我自己原先写的一大堆代码后面,出现两种情况:
情况一:三行全部加我自己的代码里面,即
;这里是N行我自己的代码
;然后加了您给我的这三行代码:
Local $sWorkDir = @ScriptDir & '\测试'
Local $ExitCode = RunWait('"' & $sWorkDir & '\Obfuscator.exe" "' & $sWorkDir & '\test.au3"', '', 0)
MsgBox(64, $ExitCode, '完成')这样的话,run这个程序仍旧没有任何反应,msgbox倒是有反应的
情况二:只加两行到我自己的代码里面,即;这里是N行我自己的代码
;然后加了您给我的这两行代码,最后那个msg的代码不添加,也就是run完之后程序就退出了:
Local $sWorkDir = @ScriptDir & '\测试'
Local $ExitCode = RunWait('"' & $sWorkDir & '\Obfuscator.exe" "' & $sWorkDir & '\test.au3"', '', 0)这个时候,这个run又可以正常地运转了。。。真的好晕了,,,
我在看看能不能把我自己的代码精简下,打包上来让您再看下
页:
[1]
2