我正在调查一个旧的 VB6 应用程序的问题,该应用程序刚刚开始在它运行的专用 XP 机器上发生。应用程序处理电子邮件消息,并为每个项目将文件写入本地目录,将文件路径传递给另一个函数进行处理,然后通过 Kill 命令删除文件。
这一切似乎都有效,直到处理过程中发生错误。错误处理程序中没有明确的 Kill 或 DeleteFile,错误只是被处理并继续处理下一条消息。一旦发生这种情况,CreateTextFile 方法对于每个后续项目都会失败,并出现“权限被拒绝”错误,因为文件已经存在(即使 CreateTextFile 调用传递 True 以进行覆盖)。
我尝试了各种方法,最值得注意的是在错误处理程序中放置 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 不应该干扰文件),但错误仍然存在。
谢谢