.net 复制完成后锁定源文件

.net 复制完成后锁定源文件,.net,file-locking,.net,File Locking,我们正在尝试将文件从服务器复制到.NET 2.0应用程序(C#)中的本地计算机,但不必要地继续锁定源文件。我们怀疑是文件服务器上配置的某种东西导致了这种行为,但不确定是什么。。。你能帮忙吗 执行文件复制操作后,文件服务器(Windows 2K3 R2)会报告源文件被读取锁定,即使服务器上没有对该文件执行进一步的操作。一旦应用程序退出,锁就会被释放 即使使用下面最基本的代码,我们也能够重现这种行为: static void Main(string[] args) { string sour

我们正在尝试将文件从服务器复制到.NET 2.0应用程序(C#)中的本地计算机,但不必要地继续锁定源文件。我们怀疑是文件服务器上配置的某种东西导致了这种行为,但不确定是什么。。。你能帮忙吗

执行文件复制操作后,文件服务器(Windows 2K3 R2)会报告源文件被读取锁定,即使服务器上没有对该文件执行进一步的操作。一旦应用程序退出,锁就会被释放

即使使用下面最基本的代码,我们也能够重现这种行为:

static void Main(string[] args)
{
    string sourceFile = @"\\win2K3server\resource\Production\IQE\sourceFolder\iqeconsole.exe";
    string destinationFile = @"d:\destinationFolder\iqeconsole.exe";
    System.IO.File.Copy(sourceFile,destinationFile,true);

    Console.ReadLine();
}
锁在执行
File.Copy()
行期间立即发生,并在该行完成后持续。在更复杂的应用程序中,当带有
File.Copy()
的例程退出(但应用程序仍在运行)时,锁仍然存在

只有当整个应用程序完成时,锁才会被释放

sourceFile
更改为使用映射驱动器而不是UNC路径对行为没有影响

当源文件位于另一台服务器上或位于本地时,不会发生此行为

如果我们在
File.Copy
之后添加以下行,锁将立即释放:

new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand();
对我们来说,这一切听起来好像服务器上有什么东西导致了这种行为。我们在服务器上安装了ShadowProtect以及McAfee防病毒软件。除此之外,在Windows Server及其组件上似乎没有安装任何其他组件

我们也不确定为什么对文件要求读取权限可以解决这个问题

如果您能回答这些问题,我们将不胜感激:

  • 是什么导致文件锁持续存在
  • 为什么要求阅读许可可以解决这个问题

  • 可能是McAfee on access扫描仪持有锁。如果只使用读访问,则会绕过它。我相信您可以使用Sysinternals Process Viewer工具(Microsoft免费提供)来确认这一点


    不确定您对McAfee的订阅是什么,但您可以定义例外规则,这样它就不会扫描此文件。

    我无法在我们的文件服务器上复制此文件


    但是,我知道机会主义锁定被禁用,因为我们正在使用PeerLock by PeerSoftware。

    您好。感谢我们目前正在对此进行调查。根据记录,我们无法确认这是使用Process Viewer时出现的问题。这个问题似乎已经神秘地自行解决了,尽管我们的服务器人员说他们对服务器什么也没做!你的回答是“最好的”,所以我给你打分。谢谢你的帮助。谢谢,但是McAfee仍然是一个很好的候选人,因为我经常在复制文件后遇到这个问题。我已杀死Access扫描仪上的McAfee,然后可以删除该文件。更新:此问题不再可复制。它似乎已经自行解决了。我们也无法确认是McAfee造成了问题(但这可能与我们调查时解决问题有关)。@Jarden:我在File.Copy上也遇到了同样的问题。如果File.Copy()之后的下一条语句是Delete,则它会报告访问异常。这个问题是不确定的,但是上面的Demand()方法解决了这个问题。据我所知,这个问题是独立于防病毒软件。我有同样的问题,但它肯定不是McAfee,我运行的是AVG,但我有文件montior禁用。我使用Unlocker告诉我什么是锁定文件,它同意这是我的应用程序。所以我猜陪审团还没出来!!然而,实施你的解决方案解决了我的问题,所以我现在很高兴