我在HTA中有一个程序,所有的辅助文件都在同一个文件夹中,这是AppData文件夹的一个子文件夹。我创建了一个卸载程序HTA,它通过简单地删除文件夹与FSO DeleteFolder()方法卸载程序。我用HtaEdit把它转换成了可执行文件。(如果你不知道这个程序,那也没关系)。可执行文件的作用是在一个临时文件夹(以及辅助文件)中创建一个HTA并运行它。问题是,当它执行DeleteFolder()方法时,会出现一条错误消息,上面写着“拒绝访问”。我不认为这是管理员的问题,因为它位于当前用户的AppData文件夹中。当我尝试以这种方式删除另一个文件夹时,它工作得很好。我认为删除包含正在运行的HTA文件的文件夹通常会出现问题,但HTA文件不在我试图删除的文件夹中,而是在临时文件夹中。但是,它被我试图删除的文件夹中的一个可执行文件调用。
我使用的是VBScript,但是如果我使用JavaScript,它也会做同样的事情。
发布于 2015-11-18 06:47:29
您不能从同一文件夹中删除文件夹,只要该文件夹中仍有打开的句柄或其中的某些内容。例如,下面的代码通常会删除VBScript的父文件夹:
Set fso = CreateObject("Scripting.FileSystemObject")
dir = fso.GetParentFolderName(WScript.ScriptFullName)
fso.DeleteFolder(dir)或者,在HTA (没有WScript对象)的情况下:
Set fso = CreateObject("Scripting.FileSystemObject")
htaPath = Replace(oHTA.CommandLine, """", "") '<HTA:APPLICATION ID="oHTA" ...>
dir = fso.GetParentFolderName(htaPath)
fso.DeleteFolder(dir)这些都是有效的,因为脚本解释器在脚本启动时会执行reads the entire script into memory操作,因此不会保留文件的打开句柄。
但是,如果该文件夹是脚本进程的当前工作目录,则删除该文件夹将失败,并显示"permission denied“错误,因为在这种情况下,该文件夹仍有一个打开的句柄。例如,如果文件夹在资源管理器或命令提示符中处于打开状态,则情况也是如此。
您可以使用handle.exe或Process Explorer检查打开的句柄。
https://stackoverflow.com/questions/33764810
复制相似问题