首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FSO DeleteFolder()方法不起作用

FSO DeleteFolder()方法不起作用
EN

Stack Overflow用户
提问于 2015-11-18 02:52:52
回答 1查看 1.7K关注 0票数 2

我在HTA中有一个程序,所有的辅助文件都在同一个文件夹中,这是AppData文件夹的一个子文件夹。我创建了一个卸载程序HTA,它通过简单地删除文件夹与FSO DeleteFolder()方法卸载程序。我用HtaEdit把它转换成了可执行文件。(如果你不知道这个程序,那也没关系)。可执行文件的作用是在一个临时文件夹(以及辅助文件)中创建一个HTA并运行它。问题是,当它执行DeleteFolder()方法时,会出现一条错误消息,上面写着“拒绝访问”。我不认为这是管理员的问题,因为它位于当前用户的AppData文件夹中。当我尝试以这种方式删除另一个文件夹时,它工作得很好。我认为删除包含正在运行的HTA文件的文件夹通常会出现问题,但HTA文件不在我试图删除的文件夹中,而是在临时文件夹中。但是,它被我试图删除的文件夹中的一个可执行文件调用。

我使用的是VBScript,但是如果我使用JavaScript,它也会做同样的事情。

EN

回答 1

Stack Overflow用户

发布于 2015-11-18 06:47:29

您不能从同一文件夹中删除文件夹,只要该文件夹中仍有打开的句柄或其中的某些内容。例如,下面的代码通常会删除VBScript的父文件夹:

代码语言:javascript
复制
Set fso = CreateObject("Scripting.FileSystemObject")
dir = fso.GetParentFolderName(WScript.ScriptFullName)
fso.DeleteFolder(dir)

或者,在HTA (没有WScript对象)的情况下:

代码语言:javascript
复制
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.exeProcess Explorer检查打开的句柄。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33764810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档