Vbscript FSO DeleteFolder()方法不工作

Vbscript FSO DeleteFolder()方法不工作,vbscript,directory,exe,hta,Vbscript,Directory,Exe,Hta,我在HTA中有一个程序,所有辅助文件都在同一个文件夹中,即AppData文件夹的子文件夹中。我创建了一个卸载程序HTA,它只需使用FSODeleteFolder()方法删除文件夹即可卸载程序。我用HtaEdit将其转换为可执行文件。(如果你不知道这个程序,没关系)。可执行文件的作用是在临时文件夹(以及辅助文件)中创建一个HTA并运行它。问题是,当它执行DeleteFolder()方法时,会出现一条错误消息,显示“拒绝访问”。我不认为这是管理员的问题,因为它位于当前用户的AppData文件夹中。当

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


我使用的是VBScript,但如果我使用JavaScript,它也会执行相同的操作。

只要文件夹中还有打开的句柄或其他内容,就不能从同一文件夹中删除文件夹。例如,以下代码通常会删除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,“”,“”)
dir=fso.GetParentFolderName(htaPath)
fso.DeleteFolder(目录)
这些都是有效的,因为脚本解释器在启动脚本时启动,所以文件没有打开的句柄

但是,如果该文件夹是脚本进程的当前工作目录,则删除该文件夹将失败,并出现“权限被拒绝”错误,因为在这种情况下,该文件夹仍有一个打开的句柄。例如,如果文件夹在资源管理器或命令提示符下打开,则同样适用


您可以使用或检查打开的句柄。

代码不起作用。在第一个中,
dir
是一个空字符串,而在第二个中,
oHTA
是未定义的。我想知道是否有办法删除包含已打开文件的文件夹。第一个代码段用于纯VBScript,不适用于HTAs,因为HTA运行时环境不提供
WScript
对象。第二个代码段是针对HTA的,您需要将
oHTA
替换为您定义的HTA应用程序ID(
)。
Set fso = CreateObject("Scripting.FileSystemObject")
htaPath = Replace(oHTA.CommandLine, """", "")  '<HTA:APPLICATION ID="oHTA" ...>
dir = fso.GetParentFolderName(htaPath)
fso.DeleteFolder(dir)