找回密码
 加入
搜索
查看: 13491|回复: 28

[AU3基础] 关于删除程序本身

 火... [复制链接]
发表于 2011-3-29 07:58:40 | 显示全部楼层 |阅读模式
关于删除程序本身
Run(@ComSpec & ' /c del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE)

这个BAT为什么能删除.au3的文件  把.au3的文件编译成.exe就不能运行呢? 就是a.au3可以删除   a.exe就不行呢
发表于 2011-3-29 08:47:37 | 显示全部楼层
        Run(@ComSpec & ' /c ping 127.0.0.1 -n 3&del /q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE) ;删除自身
        Exit
发表于 2011-3-29 10:50:41 | 显示全部楼层
这个方法有时候编译了会存在无法自删除的问题。不知道为何。。
发表于 2011-3-29 10:50:43 | 显示全部楼层
这个方法有时候编译了会存在无法自删除的问题。不知道为何。。
 楼主| 发表于 2011-3-29 11:21:47 | 显示全部楼层
tryhi 发表于 2011-3-29 08:47

我编译了 还是不能删除.exe

.au3倒是能删除 为什么呢
发表于 2011-3-29 12:39:44 | 显示全部楼层
我编译了 还是不能删除.exe

.au3倒是能删除 为什么呢
iori2882 发表于 2011-3-29 11:21



    嗯,这个方法是学虫子樱桃的,我试了可以啊,要不你时间改长一点
Run(@ComSpec & ' /c ping 127.0.0.1 -n 5&del /q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE) ;删除自身
Exit
发表于 2011-3-29 12:58:37 | 显示全部楼层
删除不掉的原因是程序正在执行,可以尝试给cmd加上点延迟
不要使用runwait
发表于 2011-3-29 13:26:17 | 显示全部楼层
exit (run())呢?
 楼主| 发表于 2011-3-29 14:12:47 | 显示全部楼层
exit (run())呢?
netegg 发表于 2011-3-29 13:26

语法错误~~~~
 楼主| 发表于 2011-3-29 14:20:43 | 显示全部楼层
#include <Array.au3> 
$1234=InputBox(0,0)
If $1234=1 Then
RunWait(@ComSpec & ' /c del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE)
EndIf
Dim $a[6] = [5,1,2,3,4,5]
_ArrayDisplay($a)

For $i = 1 To $a[0]
        MsgBox(0,0,"下标为" & $i & "内容是" & $a[$i])
Next
好像不是延迟的事情 上面代码 输入1 就删除程序自身 还是不行 和原来一样 能删除.au3 不能删除.exe
RunWait(@ComSpec & ' /c del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE)删除不成功就在删除

用延迟的那个也不行 麻烦2楼在继续测试下 如果你的还行 那肯定我出问题了
发表于 2011-3-29 15:59:28 | 显示全部楼层
exit (run(@ComSpec & ' /c del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE))
语法错误?
发表于 2011-3-29 18:50:16 | 显示全部楼层
不知道能不能直接在进程里面删除呢
发表于 2011-3-29 21:48:42 | 显示全部楼层
本帖最后由 gzh888666 于 2011-3-29 21:53 编辑

一般删除自身不要只删除一次,
Run(@ComSpec & ' /c del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"||del/f/q "' & @ScriptFullPath & '"', @ScriptDir, @SW_HIDE)
删除一次不行就再执行删除,直到成功为止!
删除后必须退出脚本,就是加上exit
这样就不会继续执行下面的语句了!
发表于 2011-3-29 22:46:17 | 显示全部楼层
本帖最后由 xxoojoeooxx 于 2011-3-29 22:47 编辑

回覆 10# iori2882

au3能删除是因为 那个档案没有因读取而锁定
exe要确保程序已经结束 才能被删除


以下在任何時間都可執行
也就是說可以插在任何地方
方案一
执行删除直到成功
Run(@ComSpec & ' /c for /l %a in (0,0,1) do (del /f /q "'&@ScriptFullPath&'"&if not exist "'&@ScriptFullPath&'" (exit))', @ScriptDir, @SW_HIDE)

方案二
执行删除直到成功附加延迟
Run(@ComSpec & ' /c for /l %a in (0,0,1) do (del /f /q "'&@ScriptFullPath&'"&if not exist "'&@ScriptFullPath&'" (exit) else (ping -n 2 127.0.0.1>nul))', @ScriptDir, @SW_HIDE)

方案三
强制关闭程序并删除
Run(@ComSpec & ' /c taskkill /f /PID '& @AutoItPID &'&del /f /q "'&@ScriptFullPath&'"', @ScriptDir, @SW_HIDE)
发表于 2011-3-30 02:35:08 | 显示全部楼层
这都说的什么和什么呀,exit可以本身就可以带操作的,如果在脚本运行的过程内部无论怎么加都删不了自身,只有在退出的时候附加代码
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-18 18:21 , Processed in 0.084144 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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