Question

Nous essayons de copier un fichier depuis un serveur vers une machine locale dans une application .NET 2.0 (C #), mais le fichier source continue à être verrouillé inutilement. Nous pensons que c'est ce qui a provoqué ce comportement sur le serveur de fichiers, mais nous ne savons pas quoi… pouvez-vous nous aider?

Après la copie du fichier, le serveur de fichiers (Windows 2K3 R2) indique que le fichier source est maintenu en lecture avec un verrou de lecture, même si aucune opération supplémentaire n’est effectuée avec le fichier sur le serveur. Le verrou est libéré une fois l'application fermée.

Nous sommes en mesure de reproduire le comportement, même avec le code le plus élémentaire présenté ci-dessous:

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

Le verrou se produit immédiatement pendant l'exécution de la ligne File.Copy () et persiste à la fin de cette ligne. Dans une application plus complexe, lorsque le sous-programme contenant File.Copy () est fermé (mais que l'application est toujours en cours d'exécution), le verrouillage est maintenu.

Le verrou n'est relâché que lorsque l'application complète est terminée.

La modification de sourceFile pour utiliser un lecteur mappé au lieu d'un chemin UNC n'a aucune incidence sur le comportement.

Ce problème ne se produit pas lorsque le fichier source est situé sur un autre serveur ou localement.

Si nous ajoutons la ligne suivante après File.Copy , le verrou est immédiatement libéré:

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

Tout cela nous semble comme si quelque chose sur le serveur était à l'origine de ce problème. Nous avons installé ShadowProtect sur le serveur avec McAfee antivirus. En dehors de cela, il semble que rien ne soit installé en plus de Windows Server et de ses composants.

Nous ne savons pas non plus pourquoi le fait de demander une autorisation de lecture sur le fichier résout le problème.

Si vous pouviez répondre à ces questions, nous vous en serions très reconnaissants:

  1. Pourquoi les verrous de fichiers sont-ils persistants?
  2. Pourquoi le fait de demander une autorisation de lecture résout le problème?
Était-ce utile?

La solution

C’est probablement le contrôle sur accès de McAfee qui maintient le verrou. Si vous utilisez uniquement un accès en lecture, il est ignoré. Je pense que vous pouvez utiliser l'outil Sysinternals Process Viewer (gratuit de Microsoft) pour le confirmer.

Vous ne savez pas quel abonnement vous avez pour McAfee, mais vous pouvez définir des règles d'exception pour que ce fichier ne soit pas analysé.

Autres conseils

Je ne parviens pas à le répliquer sur nos serveurs de fichiers.

Cependant, je sais que le verrouillage opportuniste est désactivé car nous utilisons PeerLock de PeerSoftware.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top