您好,欢迎访问三七文档
当前位置:首页 > 医学/心理学 > 药学 > autoit3删除自身的探讨
au3删除自身的探讨(一)未编译脚本文件运行脚本运行后被读入内存,脚本文件已不影响运行,可以任意地移动、改名和删除。把以下内容保存为“1.au3”,先运行,然后移动、改名或删除它:SplashTextOn(删除自身演示,请把我的脚本文件移动、改名或删除,200,150,-1,-1,4,楷体_GB2312,18)WhileFileExists(@ScriptFullPath)WEndFor$i=6To1Step-1ControlSetText(删除自身演示,,Static1,^_^验证成功&@LF&@LF&还有&$i&秒退出)Sleep(1000)Next复制代码所以,可用autoit自带FileDelete命令删除自身,并且此命令可放在任何位置,请演示以下脚本:FileDelete(@ScriptFullPath)IfFileExists(@ScriptFullPath)Then$f=@ScriptName&还好好的Else$f=@ScriptName&已删除EndIfMsgBox(1,删除自身演示,$f)复制代码(二)编译成exe文件运行编译成exe文件后运行的话,因为文件本身在进程内,文件是无法删除的。如运行上面的第二个例子结果应该是“还好好的”。所以编译成exe后,删除自身的话,只能在退出前启动其他进程,等原进程退出后再删除其文件。一般用cmd的del命令来删除的:run('cmd/cping127.0.0.1-n3&del/q/f/a'&@ScriptFullPath&'','',@SW_HIDE)复制代码等待时间是2秒(-n3是2个间隔),del应加上/a参数,确保删除带隐藏等属性的文件,此语句须放在代码结束位置或exit前。但是这个命令有不完美之处,就是无法确保文件的删除。采取的办法是等了2秒进程还没退出,就强行终止进程,因为au3是单线程,运行到exit说明其他任务已结束,强行终止进程是没问题的,可以采取以下的命令实现:run('cmd/cping127.0.0.1-n2&taskkill/f/pid'&@AutoItPID&'&del/q/f/a'&@ScriptFullPath&'','',@SW_HIDE)复制代码这个命令是确保了自身文件的删除,但exit语句不能执行其他的命令,且退出慢的话就强行结束终究不自然。写个bat文件执行后还要删除bat文件,麻烦不说而且不直观很难看懂,不推荐。其实也是cmd一行命令也就可以解决,如何实现呢?请大家动下脑筋再看隐藏内容:终极大法:cmd延时存在很大的缺陷,不合适放在脚本前端。如果放在脚本退出点,有的脚本退出点很多,每个退出点都放一条删除命令很麻烦,更何况一些非正常原因终止,尚未执行删除命令进程就结束了,达不到删除自身的目的。下面这个办法可以完美解决这个问题,同样请大家先思考一下再看答案,提示一下延时利用au3实现,前提还是不通过创建文件来实现
本文标题:autoit3删除自身的探讨
链接地址:https://www.777doc.com/doc-2899201 .html