Подтвердить что ты не робот

File.Copy блокирует исходный файл после завершения

Мы пытаемся скопировать файл с сервера, вплоть до локального компьютера в приложении .NET 2.0 (С#), но продолжаем без необходимости блокировать исходный файл. Мы подозреваем, что это что-то настроено на файловом сервере, который вызывает это поведение, но не уверен, что... вы можете помочь?

После операции копирования файлов файловый сервер (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 и его компонентов.

Мы также не уверены, почему требование разрешения чтения на файл решает проблему.

Если бы вы могли ответить на эти вопросы, мы были бы очень благодарны:

  • Что заставляет блокировки файлов сохраняться?
  • Почему запрос на чтение разрешает проблему?
4b9b3361

Ответ 1

Скорее всего, это сканер McAfee, который содержит блокировку. Если вы используете только доступ для чтения, он обходит. Я считаю, что вы можете использовать инструмент Sysinternals Process Viewer (бесплатно от Microsoft), чтобы подтвердить это.

Не уверен, какую подписку вы используете для McAfee, но вы можете определить правила исключения, чтобы он не просматривал этот файл.

Ответ 2

Я не могу реплицировать это на наших файловых серверах.

Однако я знаю, что блокировка Opportunistic отключена, поскольку мы используем PeerLock by PeerSoftware.