Comment trouvez-vous quel processus tient un fichier ouvert dans Windows?


515

Une chose qui m'agace sans fin à propos de Windows est l'ancienne erreur de violation de partage . Souvent, vous ne pouvez pas identifier ce qui le maintient ouvert. Habituellement, c'est juste un éditeur ou un explorateur qui pointe juste vers un répertoire pertinent, mais j'ai parfois dû redémarrer ma machine.

Des suggestions sur la façon de trouver le coupable?


12
Vous penseriez qu'après tout ce temps, les gars de Windows nous donneraient un moyen de le faire facilement depuis Explorer. Je me demande pourquoi cela n'est pas arrivé?
Cawflands

6
Je trouve qu'Explorer est très souvent le processus qui bloque un fichier sans raison évidente.
Eddie

Je sais que cela ne vous aide pas beaucoup, mais je me souviens bien qu'il s'agissait d'une fonctionnalité planifiée de la prochaine version de Windows après Vista et 2008 Server. ou peut-être que c'est une chose WinFS. Je ne sais pas où j'ai lu ça ...
Kip

voir ma réponse sur le super-utilisateur ici , en résumé OpenedFilesView fonctionne toujours en 2019
Vijay

Réponses:


440

J'ai eu du succès avec Sysinternals Process Explorer . Avec cela, vous pouvez rechercher quels processus ont un fichier ouvert et vous pouvez l’utiliser pour fermer le (s) descripteur (s) si vous le souhaitez. Bien sûr, il est plus sûr de fermer tout le processus. Faites preuve de prudence et de jugement.

Pour rechercher un fichier spécifique, utilisez l'option de menu Find->Find Handle or DLL... Taper une partie du chemin d'accès au fichier. La liste des processus apparaîtra ci-dessous.

Si vous préférez la ligne de commande, la suite Sysinternals inclut l’outil de ligne de commande Handle , qui répertorie les handles ouverts. Quelques exemples d'utilisation:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - trouver tous les fichiers ouverts à partir du lecteur E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question

17
Vous pouvez fermer la poignée, mais gardez à l'esprit que vous retirez le tapis d'une application, les résultats seront au mieux imprévisibles.
WaldenL

12
@Walden: Absolument. YMMV. Avec WinXP, plusieurs fois, Explorer a ouvert une poignée sans raison évidente et refuse de la fermer. Lorsque cela se produit sur un fichier que vous devez supprimer, vous avez le choix de forcer la fermeture de la poignée ou de redémarrer. Jusqu'à présent, après avoir fait cela des dizaines de fois, je n'ai subi aucun effet néfaste. Comme avec tout outil avancé, utilisez-le avec prudence et discernement.
Eddie

5
La fermeture des descripteurs peut amener l'application à réutiliser le descripteur sur un autre fichier, entraînant une corruption - voir la réponse de Jeff ci-dessous: serverfault.com/a/15695/79266 ... beaucoup plus sûr de tuer l'application qui maintient le fichier ouvert, si vous le souhaitez. ne veut pas redémarrer.
RichVel

14
Pour explorer, d'ailleurs, maintenez la touche ctrl-shift enfoncée et cliquez avec le bouton droit de la souris sur une zone vide du menu Démarrer. Vous obtiendrez "Exit Explorer" - ps, pas tout à fait la réponse de Jeff ..
Mark Sowul

2
Cela n'aide pas pour les fichiers non exécutifs comme les fichiers texte. J'ai besoin de savoir qui écrit dans un fichier journal. Une idée?
Xaqron

183

Vous pouvez utiliser le moniteur de ressources pour cela, qui est intégré à Windows 7, 8 et 10.

  1. Open Resource Monitor , qui peut être trouvé
    • En recherchant Resource Monitor ou resmon.exe dans le menu Démarrer, ou
    • En tant que bouton dans l' onglet Performances de votre gestionnaire de tâches
  2. Aller sur l' onglet CPU
  3. Utilisez le champ de recherche dans la section Poignées associées
    • Voir la flèche bleue dans la capture d'écran ci-dessous

Une fois que vous avez trouvé le descripteur, vous pouvez identifier le processus en consultant la colonne Image et / ou PID.

Vous pouvez ensuite essayer de fermer l’application comme vous le feriez normalement ou, si ce n’est pas possible, cliquer avec le bouton droit de la souris sur la poignée et arrêter le processus directement à partir de là. Peasy facile!

Capture d'écran du moniteur de ressources

Copié de ma réponse d'origine: https://superuser.com/a/643312/62


2
Il est intéressant de noter qu'il peut être difficile de trouver ce programme sous Windows 8 - une recherche de 'resmon.exe' devrait le localiser.
Kylotan

4
@ Kylotan, arrêtez de perdre votre temps à chercher. Il suffit de courir resmon directement à partir de cmd
Pacerier

1
@ Pacerier: Nice. Je ne suis pas habitué aux choses se trouvant dans le chemin Windows.
Kylotan

Cela me convient mieux que 'Handle | Les alternatives FindStr 'et' Unlocker ', bien qu'elles soient également efficaces
Marcus Vinicius Pompeu

4
Toujours valable dans Windows 10 et pouvant être trouvé à l'aide du bouton "Ouvrir le moniteur de ressources" de l'onglet Gestionnaire de tâches -> Performances.
Norman Breau

92

Essayez la commande openfiles .


10
+1 pour une commande intégrée, bien que j'utilise personnellement ProcessExplorer pour cela la plupart du temps.
RBerteig

Très utile.
Marko

7
ERREUR: le système cible doit exécuter un système d'exploitation 32 bits.
Bozojoe

4
ne fonctionne pas pour 64 OS!

12
Cela semble fonctionner pour Windows 2012R2 64 bits, mais vous devez activer le service "suivi local ouvert" en exécutant openfiles /local onet en redémarrant. Cela rend cette fonctionnalité pas très utile.
Guss

82

Soyez juste très prudent avec les poignées de fermeture; c'est encore plus dangereux que vous ne le pensez, en raison du recyclage des poignées - si vous fermez le fichier, et que le programme ouvre autre chose, le fichier original que vous avez fermé peut être réutilisé pour ce "autre chose". Et maintenant, devinez ce qui se passera si le programme continue, pensant qu'il fonctionne sur le fichier (dont vous avez fermé le pseudo), alors qu'en fait ce descripteur de fichier pointe maintenant vers autre chose.

voir l'article de Raymond Chen sur ce sujet

Supposons qu'un service d'index de recherche ait un fichier ouvert pour l'indexation mais qu'il soit bloqué temporairement et que vous souhaitiez le supprimer afin de forcer (imprudemment) le descripteur à être fermé. Le service d'index de recherche ouvre son fichier journal afin d'enregistrer certaines informations, et le descripteur du fichier supprimé est recyclé en tant que descripteur du fichier journal. L’opération bloquée s’achève enfin et le service d’index de recherche parvient enfin à fermer le descripteur qu’il avait ouvert, mais finit par fermer involontairement le descripteur du fichier journal.

Le service d'index de recherche ouvre un autre fichier, un fichier de configuration à écrire, afin qu'il puisse mettre à jour un état persistant. Le descripteur du fichier journal est recyclé en tant que descripteur du fichier de configuration. Le service d'index de recherche souhaite enregistrer certaines informations. Il écrit donc dans son fichier journal. Malheureusement, le descripteur de fichier journal a été fermé et le descripteur a été réutilisé pour son fichier de configuration. Les informations consignées vont dans le fichier de configuration, le corrompant.

Pendant ce temps, un autre descripteur que vous avez forcé à fermer a été réutilisé en tant que descripteur de mutex, utilisé pour empêcher la corruption des données. Lorsque le descripteur de fichier d'origine est fermé, le descripteur de mutex est fermé et les protections contre la corruption de données sont perdues. Plus le service est long, plus ses index sont corrompus. Finalement, quelqu'un remarque que l'index renvoie des résultats incorrects. Et lorsque vous essayez de redémarrer le service, il échoue car ses fichiers de configuration ont été corrompus.

Vous signalez le problème à la société qui fournit le service d'index de recherche et elle détermine que l'index a été corrompu, que le fichier journal a mystérieusement arrêté de se connecter et que le fichier de configuration a été écrasé. Un technicien de piètre qualité se voit confier la tâche sans espoir de comprendre pourquoi le service corrompt ses index et ses fichiers de configuration, sans savoir que la source de la corruption réside dans le fait que vous avez forcé la fermeture d'un descripteur.


12
avertissement important, cela devrait aller plus près du sommet - un redémarrage est probablement préférable à un fichier corrompu en silence.
RichVel

6
+1 Cela va certainement me faire réfléchir à deux fois avant de forcer les poignées fermées! Il me semble étrange que Windows réutilise immédiatement le numéro d'un handle fermé, au lieu de continuer à l'incrémenter et à ne l'enrouler qu'en cas de besoin. Cela réduirait au moins considérablement les chances que ce problème se produise.
EM0

1
@RichVel Terminer le processus du coupable est probablement préférable à un redémarrage complet.
Dmitry Grigoryev

@DmitryGrigoryev - bon point, et en fait je l'ai déjà mentionné ici
RichVel

2
Ceci est un avertissement très important, mais ne répond pas à la question. Comment trouvez-vous quel processus maintient un fichier ouvert dans Windows?
Ploni

29

J'ai utilisé Handle avec succès pour trouver de tels processus dans le passé.


3
J'utilise cet outil tout le temps. Si je ne parviens pas à éjecter un lecteur USB, il suffit de taper "handle H:" (ou quelle que soit la lettre du lecteur). Mieux encore, vous pouvez l'utiliser pour forcer les poignées fermées.
Chris Thompson



7

Juste pour clarifier, cela est probablement dû à un comportement incorrect des applications tierces n'utilisant pas correctement l'appel de l'API CreateFile qu'à quoi que ce soit dans Windows lui-même. C'est peut-être une conséquence de la conception de CreateFile, mais cela est fait et nous ne pouvons pas revenir en arrière.

En gros, lorsque vous ouvrez un fichier dans un programme Windows, vous avez la possibilité de spécifier un indicateur permettant un accès partagé. Si vous ne spécifiez pas l'indicateur, le programme prend un accès exclusif au fichier.

Maintenant, si Explorer semble être le coupable, il se peut que ce ne soit que superficiel, et que le véritable coupable consiste à installer une extension shell qui ouvre tous les fichiers d’un dossier à ses propres fins, mais non plus. gung-ho en le faisant, ou cela ne nettoie pas correctement après lui-même. Symantec AV est quelque chose que j'ai déjà vu faire cela auparavant, et je ne serais pas surpris que d'autres programmes audiovisuels soient également à blâmer. Les plug-ins de contrôle de source peuvent également être en cause.

Donc, pas vraiment une réponse, mais juste un conseil pour ne pas toujours reprocher à Windows ce qui pourrait être un programme tiers mal écrit (quelque chose qui peut également arriver sur tout autre système d’exploitation ayant un verrouillage de fichier implicite, mais tout système d’exploitation basé sur Unix a un accès partagé par défaut).


1
Je ne blâmerai pas une application tierce du fait que mon explorateur Windows verrouille toujours les fichiers Thumbs.db dans son répertoire de travail, mais ne le déverrouille pas toujours lorsque je change de répertoire de travail. Au moins ils sont déverrouillés quand je ferme la fenêtre, je n'ai pas à tuer TOUS les explorateurs ...
Alexander

@Darth, êtes-vous un acheteur de Microsoft?
Pacerier

6

Sur un serveur distant, lorsque vous vérifiez sur un partage réseau, quelque chose d'aussi simple que la console de gestion de l'ordinateur peut afficher ces informations et fermer le fichier.


Exactement, pourquoi y a-t-il des réponses aussi compliquées?
Rohit Gupta

6

Apropos Explorer maintenant un fichier ouvert: "Lorsque cela se produit sur un fichier que vous devez supprimer, vous avez le choix de forcer la fermeture de la poignée ou de redémarrer."

Vous pouvez simplement arrêter Explorer.

S'il s'agit d'une chose ponctuelle (normalement, l'explorateur ne garde pas ce fichier ouvert), alors je suppose que se déconnecter puis se reconnecter fera l'affaire.

Sinon, arrêtez le processus de l'Explorateur de postes de travail et faites ce que vous voulez lorsqu'il est parti. Commencez par créer une copie de cmd.exe (vous avez besoin d’une interface utilisateur pour effectuer le nettoyage souhaité). Assurez-vous qu'aucun explorateur autre que de bureau ne soit en cours d'exécution. Tuez ensuite le dernier explorateur avec, par exemple, le gestionnaire de tâches. Faites ce que vous voulez dans l'invite de commande. Enfin, exécutez Explorer à partir de l'invite de commande, qui deviendra le bureau.

J'imagine qu'il peut y avoir un désagrément résiduel si certains programmes systray ne peuvent pas gérer le redémarrage du shell.


1
C'est beaucoup plus sûr que de fermer la poignée et moins gênant que de redémarrer. S'applique également à d'autres programmes - je trouve souvent qu'un programme Microsoft Office verrouille les fichiers même après les avoir fermés.
RichVel

5

Les fichiers peuvent être verrouillés par des processus locaux ( unlocker est l'outil à utiliser) et par l'accès aux fichiers via des partages.

Il existe une fonction intégrée dans Windows qui vous indique quels fichiers de l'ordinateur local sont ouverts / verrouillés par un ordinateur distant (le fichier est ouvert via un partage de fichier):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

Là, vous pouvez même fermer le fichier avec force.




2

Les réponses susmentionnées couvrent les situations dans lesquelles un processus de programme maintient le descripteur de fichier ouvert, ce qui (heureusement) est la plupart du temps. Toutefois, dans certains cas (comme cela se produit actuellement sur ce système), le système lui-même contient un descripteur de fichier. ouvert.

Vous pouvez identifier cette situation en suivant les instructions pour rechercher le processus de conservation du descripteur de fichier à l'aide de l'explorateur de processus ci-dessus, en notant que le nom du processus est répertorié en tant que 'système', ou en suivant les instructions à l'aide du moniteur de ressources et en notant qu'aucune image n'est affichée. avoir un descripteur de fichier ouvert sur votre fichier d’intérêt (bien sûr, quelque chose ne se passe pas car vous ne pouvez pas éditer / supprimer le fichier, etc.).

Si cela se produit, votre option (à ma connaissance) est de redémarrer - ou d’oublier de faire quoi que ce soit avec ce fichier.


0

Le blog de Jeremy Zawodny m'a récemment expliqué le rôle du gestionnaire de tâches Exteneded, qui permet également de rechercher des informations supplémentaires sur les processus. +1 pour Process Explorer comme ci-dessus également, en particulier pour la suppression de processus auxquels le Gestionnaire de tâches standard ne se terminera pas.


0

Il existe un outil FILEMON et montre les fichiers ouverts et les poignées. Il est difficile de suivre son affichage si vous le regardez en direct, il le fait rapidement. Mais vous pouvez empêcher l'affichage en direct et regarder toutes les activités d'ouverture / écriture de fichiers. Maintenant détenue par Microsoft mais à l'origine par Sysinternals


1
La version mise à jour de ceci est Process Monitor. Vous pouvez l'obtenir ici: http://technet.microsoft.com/en-us/sysinternals/bb896645
lundi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.