fenhanxue 发表于 2013-5-8 00:27:55

为什么这个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

veket_linux 发表于 2013-5-8 01:42:35

runwait
等运行完 bat
再去FileDelete

user3000 发表于 2013-5-8 07:39:11

fileclose 后面需要加入一点延迟时间, 不然执行 run 时,该文件还没出现呢,当然没反应!

fenhanxue 发表于 2013-5-8 13:40:46

回复 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,但是貌似没反应。。。不知道为什么?

fenhanxue 发表于 2013-5-8 13:43:23

回复 2# veket_linux


    尝试了以下几种方案的组合,run 这里 都没反应{:face (245):}

   1、去掉FileDelete这段语句,也就是不删除BAT
   2、run 改成 runwait
   3、run前面加一行:sleep(5000)


帮忙诊断下究竟是为什么呀

fenhanxue 发表于 2013-5-8 14:46:39

求助,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)

高手帮忙这诊断哇

afan 发表于 2013-5-8 14:58:25

可以直接 Run('Obfuscator.exe'),干嘛还Run(bat) 呢

fenhanxue 发表于 2013-5-8 15:07:04

回复 2# afan


    直接run也是遇到了类似的问题,也是run没反应,所以才折中到现在的代码,

然后现在的代码,这个run也怎么都没反应哇,斑斑帮忙诊断{:face (229):}

afan 发表于 2013-5-8 15:15:14

如果你非得生成 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, '完成')

风过无痕 发表于 2013-5-8 16:39:49

回复 5# fenhanxue
添加 工作目录?因为你所有的脚本都没有指定 工作目录
试试

dancingspider 发表于 2013-5-8 16:41:03

工作目录太烦人了

user3000 发表于 2013-5-8 18:09:48

回复 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

fenhanxue 发表于 2013-5-8 19:02:12

回复 12# user3000


    恩恩,可以使用,可是很想知道我自己的代码,问题到底出现在哪里啦?

afan 发表于 2013-5-8 20:12:40

回复user3000


    恩恩,可以使用,可是很想知道我自己的代码,问题到底出现在哪里啦?
fenhanxue 发表于 2013-5-8 19:02 http://www.autoitx.com/images/common/back.gif


    9#那么多字你没看?

fenhanxue 发表于 2013-5-8 21:09:52

本帖最后由 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
查看完整版本: 求助,myscript.au3这段代码的run为什么没反应?