実行している専用のXPマシンで発生し始めたばかりの古いVB6アプリの問題を調査しています。アプリケーションは電子メールメッセージを処理し、アイテムごとにファイルをローカルディレクトリに書き込み、ファイルパスを別の関数に渡して処理してから、Killコマンドを使用してファイルを削除します。
処理中にエラーが発生するまで、すべてが機能しているようです。エラーハンドラには明示的なKillまたはDeleteFileが含まれていません。エラーは処理され、処理は次のメッセージに進みます。それが発生するとすぐに、CreateTextFileメソッドは、ファイルがすでに存在するため、「Permissiondenied」エラーで後続のすべてのアイテムに対して失敗します(CreateTextFile呼び出しは上書きのためにTrueを渡しますが)。
私はさまざまなことを試しましたが、特にKill、FSO.DeleteFile、またはDeleteFile APIの呼び出しをエラーハンドラーに入れましたが、これらはどれも機能しません(最初の2つはアクセスが拒否されて失敗し、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はファイルに干渉するものとして他に何もすべきではありませんが)、それでもエラーは解決しません。
ありがとう