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:
- Moniteur de ressources (resmon.exe)
- Explorateur de processus de Microsoft Sysinternals
- Poignée de Microsoft Sysinternals
- Rechercher un descripteur de fichier via le menu contextuel
- 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
- 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]
-une | Vider toutes les informations de poignée. |
-l | Affichez simplement les poignées de section soutenues par un fichier d'échange. |
-c | Ferme 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. |
-y | N'invitez pas à confirmer la fermeture de la poignée. |
-s | Nombre d'impressions de chaque type de poignée ouverte. |
-u | Afficher le nom d'utilisateur propriétaire lors de la recherche de poignées. |
-p | Dump gère l'appartenance au processus (nom partiel accepté). |
Nom | Recherchez les poignées des objets avec (fragment accepté). |
-nobanner | N'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:
- Téléchargez Handle depuis le site Microsoft Sysinternals.
- Copiez les fichiers handle.exe et handle64.exe dans un dossier - par exemple,
d:\tools
- 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 - 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. - 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.