我一直在使用VSS编写备份程序,并从Windows SDK 6.1示例中的VSHADOW.EXE开始。它通常可以工作,但我惊讶地发现某些文件仍然被锁定在它创建的影子副本中,例如
C:UsersFelixNtUser.dat
C:UsersFelixNtUser.dat.log1
C:UsersFelixAppDataLocalMicrosoftWindowsUsrClass.dat
C:UsersFelixAppDataLocalMicrosoftWindowsUsrClass.dat.log1
...
在影子副本中访问这些文件(使用CreateFileEx
, CopyFileEx
或使用Total Commander或任何其他工具)通常会给我一个错误32(该进程无法访问文件,因为它正在被另一个进程使用)。这似乎是随意发生的。这怎么可能呢?
我之前的编辑(事件日志消息)原来不是这个问题的核心,因为我把它修复了,它没有帮助。
有问题的文件原来是指向其他锁定文件的符号链接。影子副本中各自的文件也是指向原始硬盘上锁定文件的符号链接。要解决这个问题,必须解析符号链接并找到它所指向的文件,然后必须将该文件位于影子副本中