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?
Trouvé une solution.
Trouvez le processus en utilisant Process Explorer :
Téléchargez et installez Unlocker (Warning: Lien supprimé, car il contient des logiciels malveillants)
Déverrouiller le répertoire
Le répertoire doit maintenant être déverrouillé et peut maintenant être supprimé.
Si vous êtes administrateur sur le serveur partageant le fichier sur le réseau, vous pouvez utiliser la fonctionnalité intégrée de Windows:
J'espère que cela t'aides.
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.
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.)
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
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.