2009-03-02 13 views
21

Estamos intentando copiar un archivo de un servidor, bajarlo a una máquina local en una aplicación .NET 2.0 (C#), pero mantener el archivo fuente bloqueado innecesariamente. Sospechamos que es algo configurado en el servidor de archivos que está causando este comportamiento, pero no estoy seguro de qué ... ¿puede ayudar?File.Copy bloquea el archivo fuente después de la finalización

Después de la operación de copia de archivo, el servidor de archivos (Windows 2K3 R2) informa que el archivo fuente se mantiene con un bloqueo de lectura, aunque no se realice ninguna operación con el archivo en el servidor. El bloqueo se libera una vez que la aplicación se cierra.

que son capaces de reproducir el comportamiento, incluso con el código más básico verse a continuación:

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(); 
} 

El bloqueo occurrs inmediatamente durante la línea File.Copy() ejecución y persiste después de esta línea ha terminado. En una aplicación más compleja, cuando sale la rutina con File.Copy() (pero la aplicación aún se está ejecutando), el bloqueo persiste.

Solo cuando se termina la aplicación completa se libera el bloqueo.

Cambiar sourceFile para utilizar una unidad asignada en lugar de una ruta UNC no hace ninguna diferencia en el comportamiento.

Este comportamiento no ocurre cuando el archivo fuente está ubicado en otro servidor o está ubicado localmente.

Si añadimos la siguiente línea después de la File.Copy, el bloqueo se libera inmediatamente:

new System.Security.Permissions.FileIOPermission(System.Security.Permissions.FileIOPermissionAccess.Read, new string[] { sourceFile }).Demand(); 

Todo esto suena a nosotros como si hay algo en el servidor que está causando este comportamiento. Tenemos instalado ShadowProtect en el servidor junto con el antivirus de McAfee. Aparte de eso, parece como si no hubiera nada más instalado sobre Windows Server y sus componentes.

Tampoco estamos seguros de por qué Exigir un permiso de lectura en el archivo resuelve el problema.

Si pudiera responder a estas preguntas, se agradecería que en gran medida:

  1. Qué está causando los bloqueos de archivo para persistir?
  2. ¿Por qué exigir un permiso de lectura resuelve el problema?
+0

ACTUALIZACIÓN: este problema ya no es reproducible. Parece haberse resuelto solo. No pudimos confirmar que McAfee estuviera causando el problema tampoco (pero esto podría tener que ver con el problema de resolución mientras estábamos investigando). – Jayden

+1

@Jarden: tuve el mismo problema con File.Copy. Si la siguiente instrucción después de File.Copy() era Eliminar, informaba de Excepción de acceso. El problema estaba ocurriendo de forma no determinista, pero el método Demand() anterior resolvió el problema. Por lo que puedo ver, este problema es independiente del software antivirus. – PanJanek

+0

Tengo el mismo problema, pero definitivamente no es McAfee, estoy ejecutando AVG, pero tengo el archivo montior deshabilitado. Estoy usando Unlocker para decirme qué está bloqueando el archivo y acepta que es mi aplicación. ¡Así que supongo que los jurados todavía están fuera! Sin embargo, la implementación de su solución resuelve mis problemas, así que estoy feliz por el momento –

Respuesta

4

Es probable que el escáner de acceso de McAfee tenga el bloqueo. Si solo usa el acceso de lectura, se pasa por alto. Creo que puede usar la herramienta Sysinternals Process Viewer (libre de Microsoft) para confirmarlo.

No estoy seguro de qué suscripción tiene para McAfee, pero puede definir reglas de excepción para que no escanee este archivo.

+0

Hola. Gracias, estamos investigando esto en este momento. – Jayden

+0

Para el registro, no pudimos confirmar que este fuera el problema al utilizar Process Viewer. El problema parece haberse resuelto misteriosamente, ¡aunque nuestros servidores dicen que no le hicieron nada al servidor! Su respuesta fue "mejor", así que le han otorgado los puntos. Gracias por tu ayuda. – Jayden

+0

Gracias, pero McAfee sigue siendo un buen candidato, ya que rutinariamente me encuentro con esto después de copiar archivos. He matado a McAfee On Access Scanner, luego puedo eliminar el archivo. – cdonner

0

No puedo replicar esto en nuestros servidores de archivos.

Sin embargo, sé que el bloqueo oportunista está deshabilitado ya que estamos utilizando PeerLock por PeerSoftware.

Cuestiones relacionadas