找回密码
 加入
搜索
查看: 9474|回复: 17

[AU3基础] 求助,myscript.au3这段代码的run为什么没反应?

  [复制链接]
发表于 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-5-8 01:42:35 | 显示全部楼层
runwait
等运行完 bat  
再去FileDelete
发表于 2013-5-8 07:39:11 | 显示全部楼层
fileclose 后面需要加入一点延迟时间, 不然执行 run 时,该文件还没出现呢,当然没反应!
 楼主| 发表于 2013-5-8 13:40:46 | 显示全部楼层
回复 3# user3000

加了延时,还是没反应
#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,但是貌似没反应。。。不知道为什么?
 楼主| 发表于 2013-5-8 13:43:23 | 显示全部楼层
回复 2# veket_linux


    尝试了以下几种方案的组合,run 这里 都没反应

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


  帮忙诊断下究竟是为什么呀
 楼主| 发表于 2013-5-8 14:46:39 | 显示全部楼层 |阅读模式
求助,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)

高手帮忙这诊断哇
发表于 2013-5-8 14:58:25 | 显示全部楼层
可以直接 Run('Obfuscator.exe'),干嘛还Run(bat) 呢
 楼主| 发表于 2013-5-8 15:07:04 | 显示全部楼层
回复 2# afan


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

然后现在的代码,这个run也怎么都没反应哇,斑斑帮忙诊断
发表于 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
添加 工作目录?因为你所有的脚本都没有指定 工作目录
试试
发表于 2013-5-8 16:41:03 | 显示全部楼层
工作目录太烦人了
发表于 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
 楼主| 发表于 2013-5-8 19:02:12 | 显示全部楼层
回复 12# user3000


    恩恩,可以使用,可是很想知道我自己的代码,问题到底出现在哪里啦?
发表于 2013-5-8 20:12:40 | 显示全部楼层
回复  user3000


    恩恩,可以使用,可是很想知道我自己的代码,问题到底出现在哪里啦?
fenhanxue 发表于 2013-5-8 19:02



    9#那么多字你没看?
 楼主| 发表于 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又可以正常地运转了。。。真的好晕了,,,

我在看看能不能把我自己的代码精简下,打包上来让您再看下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 05:33 , Processed in 0.106516 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表