smooth 发表于 2010-11-13 14:16:29

请教如何保护释放的文件不被删除?

各位老师,我用AU3释放一个文件到PROGRAM FILES目录,用主界面的BUTTON来调用,

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

但是在主程序退出时,保护机制要关闭。谢谢。

pusofalse 发表于 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, "")

; Do something.

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

shenrenba 发表于 2010-11-13 14:38:58

回复 2# pusofalse


    麻烦 能解释下吗我对于DLLCALL一点都不懂

smooth 发表于 2010-11-13 15:06:49


pusofalse 发表于 2010-11-13 14:24 http://www.autoitx.com/images/common/back.gif

加了你的代码,确实能在程序运行期间保护释放的文件不被删除,
但同时我也不能调用这个文件,不知道为什么。

pusofalse 发表于 2010-11-13 17:42:36

本帖最后由 pusofalse 于 2010-11-13 17:45 编辑

回复 4# smooth


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

smooth 发表于 2010-11-13 22:57:20

回复 5# pusofalse

我就是用runwait来调用呀。

ahphsautoit 发表于 2010-11-22 11:55:11

学习一下,用得着的。
页: [1]
查看完整版本: 请教如何保护释放的文件不被删除?