我正在調查一箇舊的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