Rechercher quel processus a verrouillé un fichier sans outils tiers

2019-05-05 13:01:39
Principal·Microsoft·Rechercher quel processus a verrouillé un fichier sans outils tiers

Lorsque vous essayez de supprimer un fichier ou un dossier utilisé par un processus, la boîte de dialogue Fichier en cours d'utilisation affiche le nom du programme qui a verrouillé le fichier.

Cependant, il existe des cas où la boîte de dialogue «Fichier utilisé» n'affiche pas le nom du processus qui a un verrou sur le fichier que vous essayez de supprimer. Dans certains cas, la boîte de dialogue affichera «l'action ne peut pas être terminée car le fichier est ouvert dans un autre processus ».

Pour explorer les processus et les fichiers verrouillés, Windows Sysinternals Process Explorer est probablement la première option qui vient à l'esprit pour la plupart des utilisateurs. Cependant, il existe deux solutions intégrées pour afficher la liste actuelle des fichiers ouverts avec les noms de processus correspondants.

Trouvez quel processus a verrouillé un fichier en utilisant:

  1. Moniteur de ressources (resmon.exe)
  2. Explorateur de processus de Microsoft Sysinternals
  3. Poignée de Microsoft Sysinternals
    • Rechercher un descripteur de fichier via le menu contextuel
  4. Outil de console intégré Openfiles.exe
    • Activer le suivi des descripteurs de fichiers locaux
    • Afficher les fichiers ouverts et les noms de processus correspondants
    • Déconnectez les fichiers ouverts des dossiers partagés
  5. OpenedFilesView de Nirsoft.net (tierce partie)

1. Moniteur de ressources

Le moniteur de ressources (resmon.exe) est un outil intégré qui possède de nombreuses fonctionnalités utiles. Avec Resource Monitor, vous pouvez suivre l'utilisation actuelle du réseau et d'Internet, afficher les descripteurs associés pour les fichiers verrouillés, ainsi que gérer les processus comme vous le feriez avec le Gestionnaire des tâches.

Pour trouver le nom du processus sur lequel un fichier est verrouillé, cliquez sur l'onglet CPU, tapez le nom de fichier ou une partie de celui-ci dans la zone de texte Poignées associées.

Nous avons déjà couvert Resource Monitor. Consultez ces articles:

  • Comment utiliser le moniteur de ressources pour trouver quel processus a verrouillé un fichier?
  • Quel programme utilise toute votre bande passante Internet? Utilisez Resource Monitor pour le trouver

2. Explorateur de processus

Process Explorer n'a besoin d'aucune introduction. Dans Process Explorer, il vous suffit d'utiliser la fonction Rechercher et de taper le nom du fichier. Cela montre le processus qui accède au fichier.

Dans la vue du volet inférieur, vous pouvez fermer le descripteur de fichier si nécessaire.

Vous devez exécuter Process Explorer en tant qu'administrateur afin de gérer les processus qui s'exécutent en mode élevé. Pour élever Process Explorer, cliquez sur le menu Fichier → Afficher les détails de tous les processus .

Consultez ces articles liés à Process Explorer:

  • Comment supprimer un fichier ou un dossier non supprimable tenace dans Windows?
  • Trouvez quel programme utilise actuellement votre webcam
  • Comment trouver quel programme a provoqué un message d'erreur inconnu?
  • Que signifie Échec de l'énumération des objets dans le conteneur?

3. Gérer à partir de Windows Sysinternals

Handle est un utilitaire de Microsoft Sysinternals qui affiche des informations sur les poignées ouvertes pour tout processus du système. Vous pouvez l'utiliser pour voir les programmes qui ont un fichier ouvert ou pour voir les types d'objet et les noms de tous les descripteurs d'un programme. Handle est comme une version en ligne de commande de Process Explorer.

Remarque: La poignée v4.21 a un petit bogue où elle signale toujours «Aucune poignée correspondante trouvée» si la lettre de lecteur est en majuscule. J'espère que Microsoft le corrigera dans la prochaine mise à jour.

À partir d'une fenêtre d'invite de commandes admin, utilisez la syntaxe de ligne de commande pour rechercher le processus qui ouvre le fichier:

 handle.exe -a -u nom_fichier_avec_chemin 

Si le nom de fichier contient des espaces, placez-le entre guillemets doubles.

Exemple:

 handle.exe -a -u "c: \ users \ ramesh \ desktop \ Mandate-form.pdf" 

(La mention du nom de fichier sans le chemin d'accès ne fonctionne pas nécessairement dans toutes les situations. Il est conseillé d'inclure toujours le chemin d'accès complet.)

La sortie affiche le nom du processus, l'identifiant du processus, le nom d'utilisateur, le nom de fichier verrouillé (cible) avec le chemin.

Sysinternals Handle: arguments de ligne de commande

 utilisation: gérer [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [nom] [-nobanner] 
-uneVider toutes les informations de poignée.
-lAffichez simplement les poignées de section soutenues par un fichier d'échange.
-cFerme le handle spécifié (interprété comme un nombre hexadécimal).
Vous devez spécifier le processus par son PID.AVERTISSEMENT: la fermeture des poignées peut entraîner une instabilité de l'application ou du système.
-yN'invitez pas à confirmer la fermeture de la poignée.
-sNombre d'impressions de chaque type de poignée ouverte.
-uAfficher le nom d'utilisateur propriétaire lors de la recherche de poignées.
-pDump gère l'appartenance au processus (nom partiel accepté).
NomRecherchez les poignées des objets avec (fragment accepté).
-nobannerN'affichez pas la bannière de démarrage et le message de copyright.

Aucun argument ne videra toutes les références de fichier.

Ajouter la poignée Sysinternals au menu contextuel

Vous pouvez ajouter Sysinternals Handle au menu contextuel des fichiers pour trouver rapidement le programme qui a verrouillé le fichier. Pour l'ajouter au menu contextuel, procédez comme suit:

  1. Téléchargez Handle depuis le site Microsoft Sysinternals.
  2. Copiez les fichiers handle.exe et handle64.exe dans un dossier - par exemple, d:\tools
  3. Copiez les lignes de code suivantes dans le Bloc-notes et enregistrez le fichier sous find_handle.vbs dans un emplacement permanent.
     'Exécute l'utilitaire Sysinternals Handle.exe avec un argument de nom de fichier. '© Ramesh Srinivasan - https://winhelponline.com/blog' Date de création: 29 mars 2008 'Date de mise à jour: 11 juin 2019' Pour toutes les versions de Windows, y compris Windows 10 Option Explicit Dim objShell, WshShell, objFSO, sBaseKey, sFilename Définir objShell = CreateObject ("Shell.Application") Définir WshShell = CreateObject ("WScript.Shell") Définir objFSO = CreateObject ("Scripting.FileSystemObject") Si WScript.Arguments.Count = 0 Alors sBaseKey = "HKCU \ Logiciel \ Classes \ * \ shell \ "WshShell.RegWrite sBaseKey &" FindHandle \ ", " Find Handle ", " REG_SZ "WshShell.RegWrite sBaseKey &" FindHandle \ command \ ", " wscript.exe "&" "" "& _ WScript.ScriptFullName & "" "" & "" & "" "" & "% 1" & "" "", "REG_SZ" Sinon si objFSO.FileExists (WScript.Arguments (0)) = True Then sFilename = lcase (WScript.Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u" & _ "" "& sFilename &" "" ", " ", " runas ", 1 Fin Si Fin Si 

    Remarque: Le chemin d'accès Sysinternals Handle.exe est codé en dur comme d:\tools\handle.exe dans le script ci-dessus. Si le programme se trouve sur un chemin différent, modifiez le chemin dans le script en conséquence. Pour Windows 64 bits, vous pouvez utiliser handle.exe ou handle64.exe

  4. Double-cliquez sur find_handle.vbs pour ajouter l'entrée de menu contextuel dans le registre. Vous devrez effectuer cette opération une seule fois. Mais, si vous déplacez le script dans un autre dossier, vous devrez à nouveau double-cliquer dessus pour mettre à jour le chemin d'accès dans le registre.
  5. Vous verrez l'option Rechercher une poignée lorsque vous cliquez avec le bouton droit sur un fichier. Cliquez dessus pour lancer le script qui à son tour exécute handle.exe avec l'argument nom de fichier pour trouver le processus qui a verrouillé le fichier.

Pour supprimer l'entrée de menu contextuel Rechercher un handle, démarrez l'Éditeur du Registre ( regedit.exe ) et supprimez la clé suivante:

 HKEY_CURRENT_USER \ Software \ Classes \ * \ shell \ FindHandle 

4. OpenFiles.exe - un outil de console intégré

Un autre outil intégré que nous allons utiliser est Openfiles.exe, un outil de console qui n'est pas nouveau pour Windows. Il a été initialement introduit en 2000 dans le cadre des outils du Kit de ressources Windows 2000/2003. Cet utilitaire a ensuite été inclus par défaut dans Windows Vista et versions ultérieures (y compris Windows 10). Openfiles affiche la liste des fichiers actuellement ouverts à partir de dossiers locaux ou partagés, ainsi que l'ID de poignée et le nom de l'exécutable de processus. Cet outil vous permet également de déconnecter un ou plusieurs fichiers ouverts à distance d'un dossier partagé.

Activer pour la première fois l'indicateur global «Maintenir la liste des objets»

Tout d'abord, pour activer le suivi des descripteurs de fichiers locaux, vous devez activer l'indicateur «maintenir la liste des objets» en exécutant la commande suivante à partir de l'invite de commandes admin.

 openfiles / local sur 

Vous verrez le message suivant:

INFO: Le drapeau global du système «maintenir la liste des objets» est actuellement activé.

Vous devrez exécuter cette commande pour la première fois uniquement. Redémarrez ensuite Windows pour que la modification prenne effet.

Afficher les fichiers ouverts et les noms de processus correspondants

Après avoir redémarré Windows, à partir d'une fenêtre d'invite de commandes administrateur, tapez:

 Ouvrir des fichiers 

Il répertorie l'ID de fichier / descripteur, le nom du processus et la liste des fichiers ouverts localement ou ouverts à distance via des points de partage locaux, sous forme de tableau.

Pour afficher la sortie au format List ou CSV, utilisez le paramètre / query.

 openfiles / query / FO LIST openfiles / query / FO CSV 

Pour copier la sortie dans le presse-papiers, dirigez la sortie vers Clip.exe comme ci-dessous. Collez ensuite la sortie dans le Bloc-notes ou tout autre éditeur de votre choix.

 openfiles | clip 

 openfiles / query / FO LIST | clip openfiles / query / FO CSV | clip 

Pour plus d'informations sur la copie de la sortie de l'invite de commandes dans le presse-papiers ou sur l'enregistrement de la sortie dans un fichier, consultez l'article Comment copier le texte de sortie de l'invite de commandes dans le presse-papiers ou Enregistrer dans un fichier?

Pour savoir si un fichier particulier est en cours d'utilisation par un programme (et pour savoir quel programme), vous pouvez utiliser la ligne de commande suivante.

 openfiles | findstr / i 

Exemple:

 openfiles | findstr / i eiffel 

La commande ci-dessus répertorie tous les fichiers ouverts qui contiennent le mot «eiffel» dans le nom de fichier. Dans cet exemple, Word 2016 a actuellement le verrou sur le fichier «La Tour Eiffel.docx» (ID 4576).

Et la boîte de dialogue «Fichier en cours d'utilisation» me dit la même chose.

Déconnectez les fichiers ouverts à distance du dossier partagé.

Pour déconnecter les fichiers ouverts du dossier partagé afin de pouvoir supprimer, renommer le fichier ou modifier le contenu, utilisez le paramètre /disconnect pour couper les connexions à ce fichier. Voici les options de ligne de commande.

 OPENFILES / Disconnect [/ S system [/ U username [/ P [password]]]] {[/ ID id] [/ A accessible par] [/ O openmode]} [/ OP openfile] Description: Permet à un administrateur de déconnecter les fichiers et les dossiers qui ont été ouverts à distance via un dossier partagé. Liste des paramètres: / S system Spécifie le système distant auquel se connecter. / U [domaine \] utilisateur Spécifie le contexte utilisateur dans lequel la commande doit s'exécuter. / P [mot de passe] Spécifie le mot de passe pour le contexte utilisateur donné. / ID id Indique de déconnecter les fichiers ouverts par ID de fichier. Le caractère générique "*" peut être utilisé. / A accessible par Spécifie de déconnecter tous les fichiers ouverts par la valeur "accessible par". Le caractère générique "*" peut être utilisé. / O openmode Spécifie de déconnecter tous les fichiers ouverts par la valeur "openmode". Les valeurs valides sont Lecture, Écriture ou Lecture / Écriture. Le caractère générique "*" peut être utilisé. / OP openfile Spécifie de déconnecter toutes les connexions de fichiers ouverts créées par un nom spécifique de "fichier ouvert". Le caractère générique "*" peut être utilisé. /? Affiche ce message d'aide. Exemples: OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / Un nom d'utilisateur OPENFILES / Disconnect / O Lecture / Écriture OPENFILES / Disconnect / OP "c: \ My Documents \ somedoc.doc" / ID 234 OPENFILES / Disconnect / S system / U username / ID 5 OPENFILES / Déconnecter / Système S / Nom d'utilisateur U / Mot de passe P / ID * 

Openfiles.exe fait parfaitement le travail de lister tous les fichiers ouverts avec les noms de processus, mais il ne peut pas tuer de force les processus. Cependant, cet excellent outil de console intégré (mais ignoré) peut être utile lorsque vous voulez trouver rapidement un nom de processus qui utilise un fichier ou déconnecter un fichier auquel un utilisateur réseau accède via un dossier partagé - sans dépendre sur une solution tierce.

5. OpenedFilesView

OpenedFilesView de Nirsoft affiche la liste de tous les fichiers ouverts sur votre système. Pour chaque fichier ouvert, des informations supplémentaires sont affichées: valeur de la poignée, accès en lecture / écriture / suppression, position du fichier, le processus qui a ouvert le fichier, et plus encore… En option, vous pouvez également fermer un ou plusieurs fichiers ouverts, ou fermer le processus qui ouvert ces fichiers.

Vous pouvez fermer les processus des fichiers sélectionnés ou fermer les descripteurs de fichiers sélectionnés. Le numéro de handle est représenté en valeurs hexadécimales tandis que l'outil de console openfiles.exe l'affiche au format normal. Cet outil vous permet également d'ajouter une option de menu contextuel pour trouver rapidement le processus qui utilise actuellement un fichier, via le menu contextuel. Je considère que l'option du menu contextuel / la prise en charge de la ligne de commande est l'une des fonctionnalités les plus utiles offertes par OpenedFilesView.

Choix De L'Éditeur