Comment puis-je déterminer si un fichier spécifique est ouvert dans Windows? [fermé]

87

L'un de mes outils préférés pour Linux est lsof - un vrai couteau suisse!

Aujourd'hui, je me suis demandé quels programmes sur un système WinXP avaient un fichier spécifique ouvert. Existe-t-il une utilité équivalente à lsof? De plus, le fichier en question se trouvait sur un partage réseau, donc je ne suis pas sûr que cela complique les choses.

Daniel Fone
la source

Réponses:

74

Utilisez Process Explorer de Sysinternals Suite, la fonction Find Handle ou DLL vous permettra de rechercher le processus avec ce fichier ouvert.

Jay Hofacker
la source
Cela répond-il vraiment à la question? Process Explorer vous permet de voir quels fichiers sont ouverts pour un processus / handle / dll / peu importe, mais c'est le mappage inverse. Voir ma réponse stackoverflow.com/questions/15708/… à cette question.
Greg Mattes
6
Oui. Cliquez sur Find Handle ou Dll (ou appuyez sur Ctrl-F), tapez le nom du fichier que vous recherchez et vous vous retrouvez avec une liste de processus avec ce fichier ouvert.
Jay Hofacker
Process Explorer a maintenant été renommé et intégré dans "Process Monitor".
Matthew McCullough
7
@MatthewMcCullough Des références? Vous avez tort, Process Explorer et Process Monitor sont deux utilitaires différents.
Alois Mahdal
2
Process Explorer a-t-il une interface de ligne de commande?
Anderson Green
41

L'équivalent de lsof -p pidest la sortie combinée du handle sysinternals et des listdlls, ie

handle -p pid
listdlls -p pid

vous pouvez trouver pid avec sysinternals pslist.

peterh - Réintégrer Monica
la source
Est-ce que cela vient avec une installation Windows standard comme Windows 10?
Morten le
10

Essayez Handle . Filemon & Regmon sont également parfaits pour essayer de comprendre ce que le programme duce foo fait à votre système.

slipsec
la source
@slipsec FileMon et Regmon sont désormais remplacés par Process Monitor v3.2 sur les versions de Windows commençant par Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 et Windows Vista.
Lucky
7

Un équivalent de lsof pourrait être combiné en sortie du handle de Sysinternals et des listdlls , c'est-à-dire:

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

Malheureusement, vous devez "exécuter en tant qu'administrateur" pour pouvoir les utiliser.

De plus, les listdll et handle ne produisent pas de forme continue de type table, donc le filtrage du nom de fichier masquerait le PID. findstr /c:pid: /c:<filename>devrait vous rapprocher des deux utilitaires, cependant

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

Ici, nous pouvons voir que gvim.exe est celui qui a ouvert ce fichier.

Alois Mahdal
la source
5

Essayez Unlocker .

Le site Unlocker a un graphique astucieux (faites défiler vers le bas après avoir suivi le lien) qui montre une comparaison avec d'autres outils. De toute évidence, de telles comparaisons sont généralement biaisées car elles sont généralement écrites par l'auteur de l'outil, mais le tableau répertorie au moins les alternatives afin que vous puissiez les essayer par vous-même.

Greg Mattes
la source
4
Unlocker répertorie uniquement les fichiers verrouillés, pas les fichiers ouverts. La plupart des logiciels Windows verrouillent la DLL utilisée mais pas vos documents.
Tobias
5

Si le fichier est un .dll, vous pouvez utiliser l' application de ligne de commande TaskList pour voir qui l'a ouvert:

TaskList /M nameof.dll
Sean
la source
3

Il existe un programme "OpenFiles", qui semble faire partie de Windows 7. Semble qu'il peut faire ce que vous voulez. Il peut lister les fichiers ouverts par des utilisateurs distants (via le partage de fichiers) et, après avoir appelé "openfiles / Local on" et un redémarrage du système, il devrait être capable d'afficher les fichiers ouverts localement. Ce dernier aurait des pénalités de performance.

anonyme
la source
1
Je viens ici à la recherche d'un moyen de savoir qui m'empêche de supprimer un dossier et d'éviter un redémarrage, et je trouve que la commande dont j'ai besoin nécessite une configuration de configuration qui ... vous l'avez deviné .... nécessite un redémarrage. Comment très fenêtres.
Gus
les gens, sachez que la commande openfiles prend beaucoup de temps à s'exécuter (de l'ordre de 4 minutes)!
NH.
2

Si vous cliquez avec le bouton droit de la souris sur l'icône «Ordinateur» (ou «Poste de travail») et sélectionnez «Gérer» dans le menu contextuel, cela vous amènera à la console de gestion de l'ordinateur.

Là-dedans, sous Outils système \ Dossiers partagés, vous trouverez «Fichiers ouverts». C'est probablement proche de ce que vous voulez, mais si le fichier est sur un partage réseau, vous devrez faire la même chose sur le serveur sur lequel le fichier réside.

Matt Hamilton
la source
3
Notez que cela n'affiche que les fichiers partagés ouverts par d'autres utilisateurs du réseau. Cela n'aide pas à trouver les fichiers ouverts sur le système local. Faire cela sur le serveur vous dirait probablement quel utilisateur a ouvert le fichier, mais pas quel programme sur la machine de cet utilisateur. Process Explorer (comme mentionné par @JayHofacker) a bien fonctionné pour moi.
tomlogic
2

Utilisez Process Explorer pour trouver l'ID de processus. Ensuite, utilisez Handle pour savoir quels fichiers sont ouverts.

Par exemple, poignée -p

J'aime cette approche parce que vous utilisez des utilitaires de Microsoft lui-même.

pushNpop
la source
si seulement nous avions le code source de ceux-ci
graywolf
2

Dans OpenedFilesView , dans le menu Options, il y a un élément de menu nommé "Afficher les fichiers réseau". Peut-être qu'avec cela activé, l'utilitaire susmentionné est d'une certaine utilité.

M8R-qpgep8
la source