为什么重新创建在Windows资源管理器中打开时删除的文件夹在WSH中失败?

时间:2018-04-10 15:01:25

标签: windows-10 file-permissions wsh permission-denied

这是一个非常具体的问题,但我会将其分解。

这是Bug.js,它有条件地删除了一个目录并重新创建它(有效地将其创建为空):

var fso = new ActiveXObject("Scripting.FileSystemObject");
DIROutputFull = "C:\\Test"
if(fso.FolderExists(DIROutputFull)) fso.DeleteFolder(DIROutputFull);
fso.CreateFolder(DIROutputFull);

Bug.js的运行方式与cscript.exe Bug.js类似,它通常有效 - 除非C:\Test预先存在且我在C:\Test打开了一个Windows资源管理器窗口。这是预期的,因为有人可能会认为删除该目录可能会失败。相比之下,重新创建它是失败的。

所以这是事件的顺序:

cscript.exe Bug.js
cscript.exe Bug.js
cscript.exe Bug.js
[...]
cscript.exe Bug.js
start C:\Test
cscript.exe Bug.js
cscript.exe Bug.js

这是输出:

[...]

C:\>cscript.exe Bug.js
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.


C:\>start C:\Test

C:\>cscript.exe Bug.js
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Bug.js(4, 1) Microsoft JScript runtime error: Permission denied


C:\>cscript.exe Bug.js
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

注意第4行拒绝权限,而不是3:C:\Test实际上已删除,但未重新创建。

为什么?另请注意,这个极小的用例正是我能够重现的。我经常遇到这个问题比我想要的更多,并且我使用的是我愿意修改的脚本,因为它经常从外部来源更新。

有关我的环境的一些信息:

C:\>ver

Microsoft Windows [Version 10.0.16299.309]

C:\>cscript.exe /?
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

还有什么相关的?

0 个答案:

没有答案