我正在调查一个旧的VB6应用程序,它刚刚开始发生在它运行的专用XP机器上的问题。应用程序处理电子邮件消息,并为每个项目将文件写入本地目录,将文件路径传递给另一个函数进行处理,然后通过Kill命令删除文件。DeleteFile和CreateTextFile上FileSystemObject“权限被拒绝”
这一切似乎工作,直到处理过程中发生错误。错误处理程序没有显式的Kill或DeleteFile,错误只是被处理,并且处理继续下一条消息。一旦发生这种情况,CreateTextFile方法将失败,因为文件已存在(即使CreateTextFile调用传递为True覆盖),每个后续项目都会发生'Permission denied'错误。
我已经尝试了各种各样的东西,最着名的是把Kill,FSO.DeleteFile或者调用DeleteFile API的错误处理程序,但是这些工作都不起作用(前两次失败,权限被拒绝,API不会出错,但是也不删除文件)。
我已经在机器上安装了Unlocker,并且对该文件锁定的唯一进程就是正在讨论的应用程序。一旦问题发生,Filemon就会在文件之后报告'IRP_MJ_CREATE'文件上的'共享冲突',所以我想这可能是指向这个问题,但我不明白问题实际上是什么。
简化代码如下:
Do While objMessages.Count > 0
Set fsObj = CreateObject("Scripting.FileSystemObject")
Set tsObj = fsObj.CreateTextFile("C:\Temp\MyFile.txt", True)
...
tsObj.Close
Set tsObj = Nothing
Set fsObj = Nothing
...
<some processing which may raise an error>
...
Kill ("C:\Temp\MyFile.txt") ' Works if no error raised & processing continues ok
...
...
Loop
ErrorHandler:
Kill ("C:\Temp\MyFile.txt") ' Permission Denied
Set fsObj = CreateObject("Scripting.FileSystemObject")
fsObj.DeleteFile("C:\Temp\MyFile.txt", True) ' Permission Denied
Dim lRet As Long
lRet = DeleteFile(gstrBodyTextFile) ' Nothing done
' After error, processing returns to calling procedure
' which is in a loop and calls back into here and starts
' to fail on CreateTextFile
这有我难倒我不得不承认,如果任何人都可以表明,它可能是什么,我将不胜感激。我应该补充说McAfee已经安装在机器上,但是我已经删除了它,以排除它的干扰(即使Unlocker不应该干扰文件),但错误依然存在。
感谢
你有多确定在代码有机会关闭文件之前没有发生错误(例如'tsObj.Close'之前的错误)? – rskar 2012-04-04 13:43:14
您在“<可能引发错误的某些处理>”中有遗漏的代码...代码打开了有问题的文件的任何机会,并且处理过程中出现错误会导致您在关闭之前跳出它? – tcarvin 2012-04-04 14:37:44
你能否发布缺少的代码段,尽管你提到它有它自己的错误处理,它可能会保存密钥^ _^ – 2012-04-04 14:55:08