我在服务器 Windows 2003 服务器(最新的服务包等)上有一些进程,它们表现出相同的问题:随机失败,无法删除他们应该能够删除的文件。这发生在我编写的软件和批处理文件(从任务调度程序运行)中。
例如:我有一个程序打开一个现有文件,然后创建一个与该文件同名的日志,但扩展名不同。当我的程序处理完文件后,它会将其移动到一个名为“done”的子目录中,然后删除日志。但是,有时我的删除失败。计算机上没有安装可能使文件保持打开状态的病毒扫描程序。我的软件是唯一可以对这个文件做任何事情的软件——哎呀,它创建了这个文件。但是,该文件无法删除。该软件每周处理超过 5000 个文件。有几个星期我永远不会得到错误,另一些星期会发生一两次,显然是随机的。这不是权限访问的事情,我很困惑。这不是我可以按需复制的问题;它有时会发生。
有没有人遇到过这样的事情?我在删除中放置了一个错误陷阱,它似乎在删除时出现“访问被拒绝”类型的错误。
--- ADDENDUM 只是另一个注意事项:是的,我在关闭文件后尝试延迟删除(请参阅下面的评论)。此外,我拥有的批处理文件之一是这样做的:
if exist my_lockfile.txt goto exit_this_batch
echo here is a lock file > my_lockfile.txt
call someother_program
call more_programs
call there_is_always_a_delay_of_at_least_a_minute_here
del my_lockfile.txt
:exit_this_batch
这个批处理文件大约万分之一会删除失败。使用 echo 创建和 del 创建之间的延迟总是至少一分钟。诡异的。
我在运行卷影复制服务时遇到过这样的行为,如果适用,SQL Server VSS Writer(它曾经表现出一些错误。)如果该服务对您的服务器不重要,或者您可以暂时关闭它,请尝试将其关闭,看看您是否仍然可以重现该问题。
如果您将文件删除延迟一秒钟,问题会消失吗?你有能力这样做吗?如果是这种情况,这是一个潜在的锁定问题,甚至可能来自原始过程。
编辑
由于这不是原始进程的文件锁定问题,是否有多个进程可以访问相关目录?