找回密码
 加入
搜索
查看: 2503|回复: 6

[AU3基础] 请教如何保护释放的文件不被删除?

  [复制链接]
发表于 2010-11-13 14:16:29 | 显示全部楼层 |阅读模式
各位老师,我用AU3释放一个文件到PROGRAM FILES目录,用主界面的BUTTON来调用,

但是释放之后,手工就能把它删除掉,这样太不牢靠了,怎么样保护在主程序运行期间它不被删除?

但是在主程序退出时,保护机制要关闭。谢谢。
发表于 2010-11-13 14:24:14 | 显示全部楼层
$sFilePath = "YourFileName"
$hFile = DllCall("Kernel32.dll", "handle", "CreateFile", "str", $sFilePath, _
                "dword", 0xC0000000, "dword", 3, "dword", 0, _
                "dword", 3, "dword", 0, "handle", 0)

OnAutoItExitRegister("_CloseFile")

MsgBox(0, $hFile[0], "")

; Do something.

Func _CloseFile()
        DllCall("Kernel32.dll", "bool", "CloseHandle", "handle", $hFile[0])
EndFunc        ;==>_CloseFile

评分

参与人数 1贡献 +5 收起 理由
afan + 5 强就一个字

查看全部评分

发表于 2010-11-13 14:38:58 | 显示全部楼层
回复 2# pusofalse


    麻烦 能解释下吗  我对于DLLCALL一点都不懂
 楼主| 发表于 2010-11-13 15:06:49 | 显示全部楼层
pusofalse 发表于 2010-11-13 14:24


加了你的代码,确实能在程序运行期间保护释放的文件不被删除,
但同时我也不能调用这个文件,不知道为什么。
发表于 2010-11-13 17:42:36 | 显示全部楼层
本帖最后由 pusofalse 于 2010-11-13 17:45 编辑

回复 4# smooth


    你是怎么调用那个文件的?当成文本读写里面的内容?还是当做一个可执行文件来创建进程?
如果是前者,那就不要用FileOpen、FileRead、FileWrite这些函数,FileOpen会用独占模式打开文件,对于已经打开的文件,FileOpen会失败。用CreateFile、ReadFile、WriteFile代替。
如果是后者,那上面的代码根本没有意义,因为,既然已经创建了进程,那在进程执行期间,进程文件始终是不能删除的。或者,在创建进程之前,先用CloseHandle关闭句柄,在进程退出之后,再次调用CreateFile打开。
 楼主| 发表于 2010-11-13 22:57:20 | 显示全部楼层
回复 5# pusofalse

我就是用runwait来调用呀。
发表于 2010-11-22 11:55:11 | 显示全部楼层
学习一下,用得着的。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-21 18:40 , Processed in 0.087610 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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