web-dev-qa-db-fra.com

Libération des verrous de partage de fichiers Windows

Ce problème se pose de temps en temps au travail. Notre machine de construction peut avoir accès à ses fichiers via un partage de fichiers Windows normal. Si quelqu'un parcourt un dossier à distance sur la machine et laisse la fenêtre ouverte pendant la nuit, la construction échoue (comme elle le fait maintenant). La fenêtre de l'Explorateur a laissé des points ouverts sur l'un des sous-dossiers de l'arborescence source. La construction supprime la source et effectue une nouvelle extraction avant la compilation. La suppression échoue.

En ce moment, j'aimerais que la construction fonctionne. Je suis connecté depuis chez moi et je préfère ne pas redémarrer la machine de compilation. Je ne parviens pas à obtenir la personne dont la machine est à la recherche et les fichiers, et je ne peux pas redémarrer à distance leur machine.

Quand un partage Windows a un verrou, le processus de verrouillage est Système, donc je ne pense pas pouvoir le tuer, comme avec les verrous normaux.

Est-ce que quelqu'un connaît un moyen de libérer le verrou sur un dossier partagé sans avoir à redémarrer la machine?

29
Jonathan Wright

Trouvé une solution.

  1. Trouvez le processus en utilisant Process Explorer :

    1. Téléchargez et extrayez procexp.exe
    2. Dans Process Explorer, utilisez la commande "Rechercher un handle ou une DLL ..." dans le menu "Rechercher".
    3. Entrez le nom du répertoire qui a du mal à supprimer
    4. Une liste des fichiers ouverts correspondant à ce nom doit être affichée. Prenez quelques hypothèses et trouvez lequel ne parvient pas à être supprimé. Si le fichier est verrouillé par un partage Windows, le processus contenant le fichier sera Système.
    5. Notez le répertoire qui est resté ouvert
  2. Téléchargez et installez Unlocker (Warning: Lien supprimé, car il contient des logiciels malveillants)

    1. Installez Unlocker, en désactivant l'option pour les extensions de l'Explorateur et autres objets indésirables
  3. Déverrouiller le répertoire

    1. Ouvrez une fenêtre de commande et accédez à C:\Program Files\Unlocker.
    2. À partir de la fenêtre de commande, exécutez Unlocker.exe "le-chemin-du-dossier-verrouillé"
    3. Une boîte de dialogue apparaît confirmant le déverrouillage. Utilisez le bouton de déverrouillage pour déverrouiller le fichier

Le répertoire doit maintenant être déverrouillé et peut maintenant être supprimé.

24
Jonathan Wright

Si vous êtes administrateur sur le serveur partageant le fichier sur le réseau, vous pouvez utiliser la fonctionnalité intégrée de Windows:

  1. Démarrer → Poste de travail → Cliquez avec le bouton droit de la souris sur → Gérer pour accéder à l'ordinateur. Console de gestion
  2. Dans le menu de gauche, accédez à Outils système → Dossiers partagés.
  3. Vous pouvez voir les partages, les sessions et les fichiers ouverts ici. Cela vous permet de savoir qui a ouvert quels fichiers depuis quels postes de travail.
  4. Cliquez avec le bouton droit sur un élément de la liste pour pouvoir supprimer le verrou de fichier.

J'espère que cela t'aides.

23
sudheeshix

Essayez Process Hacker: https://wj32.org/processhacker/

Process Hacker est comme Process Explorer sur les stéroïdes. 

Pour trouver le processus incriminé, appuyez sur CTRL + F ou cliquez sur le bouton "Rechercher les descripteurs de DLL" et recherchez le nom du fichier.

Une fois que vous avez trouvé le fichier dans la boîte de dialogue Rechercher des poignées, vous pouvez simplement cliquer dessus avec le bouton droit de la souris et choisir "Fermer". (au moins pour v2.39.124)

Les anciennes versions avaient une option "Terminator" dans le menu contextuel du processus. Faites un clic droit sur le processus incriminé -> Miscellaneous -> Terminator -> Sélectionnez les techniques de terminaison. Notez que certains sont potentiellement dangereux et peuvent avoir des conséquences inattendues.

3
Charles Burns

J'ai eu des problèmes similaires, et aucune de ces suggestions que j'ai vues ci-dessus ne semble convenir aux constructions automatisées de nuit (comme l'indique l'affiche originale), car elles nécessitent toutes un effort manuel pour rechercher et éliminer les cadenas.

La seule méthode que j'ai essayée et qui semble fonctionner de manière fiable consiste à supprimer le partage lui-même, à créer le build, puis à rajouter le partage. Voici un moyen de supprimer le partage automatiquement:

D:\Projets> Projets net share/DELETE/Y

Les utilisateurs ont des fichiers ouverts sur les projets. La poursuite de l’opération forcera la fermeture des fichiers.

Les projets ont été supprimés avec succès.

(REMARQUE: il peut être difficile de créer à nouveau le partage automatiquement si les groupes de privilèges que vous devez lui attribuer sont en désordre.)

1
Sean

Une autre option consiste, à partir de Windows Vista, à utiliser l'outil Windows intégré au système: 

surveiller les ressources: perfmon.exe /res

Extrait de: Http://www.sysadmit.com/2017/06/windows-how-to-know-that-process-has-open-a-file.html

0
Panuels

La façon dont je le fais est en utilisant à la fois OpenFiles.exe et Handle.exe Vous pouvez les exécuter dans n'importe quel ordre et vous aurez votre ressource entièrement déverrouillée.

OpenFiles: pour déconnecter les sessions de partage de fichiers

Handle.exe: pour libérer les descripteurs ouverts (n'essayez pas de fermer les descripteurs appartenant à pid4, car c'est le processus système)

Vous pouvez automatiser cela en utilisant powershell, batch ou n'importe quelle langue de votre choix.

0
Cogent