Come posso determinare se un file specifico è aperto in Windows?[Chiuso]
-
08-06-2019 - |
Domanda
Uno dei miei strumenti preferiti per Linux è lsof - un vero coltellino svizzero!
Oggi mi sono ritrovato a chiedermi quali programmi su un sistema WinXP avessero aperto un file specifico.Esiste un'utilità equivalente a lsof?Inoltre, il file in questione si trovava su una condivisione di rete, quindi non sono sicuro che ciò complichi le cose.
Soluzione
Utilizzo Esplora processi dalla suite Sysinternals, la funzione Trova handle o DLL ti consentirà di cercare il processo con quel file aperto.
Altri suggerimenti
L'equivalente di lsof -p pid
è l'output combinato dell'handle sysinternals e delle listdlls, vale a dire
handle -p pid
listdlls -p pid
puoi scoprire pid con sysinternals pslist
.
Un equivalente di lsof potrebbe essere l'output combinato di Sysinternals maniglia E listdlls, cioè.:
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
Sfortunatamente, devi "eseguire come amministratore" per poterli utilizzare.
Anche listdlls E maniglia non produrre un modulo continuo simile a una tabella, quindi il filtraggio del nome file nasconderebbe il PID. findstr /c:pid: /c:<filename>
dovrebbe avvicinarti molto ad entrambe le utilità, però
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
[...]
Qui possiamo vedere che gvim.exe è quello che ha questo file aperto.
Tentativo Sbloccatore.
Il sito Unlocker ha un grafico elegante (scorri verso il basso dopo aver seguito il collegamento) che mostra un confronto con altri strumenti.Ovviamente tali confronti sono solitamente parziali poiché sono generalmente scritti dall'autore dello strumento, ma il grafico almeno elenca le alternative in modo che tu possa provarle tu stesso.
Se il file è un .dll, puoi utilizzare il file .dll Elenco delle attività app da riga di comando per vedere chi l'ha aperta:
TaskList /M nameof.dll
Se fai clic con il pulsante destro del mouse sull'icona "Computer" (o "Risorse del computer") e selezioni "Gestisci" dal menu a comparsa, verrai indirizzato alla console Gestione computer.
Lì, sotto Strumenti di sistema\Cartelle condivise, troverai "Apri file".Questo è probabilmente vicino a quello che desideri, ma se il file si trova su una condivisione di rete, dovresti fare la stessa cosa sul server su cui risiede il file.
Esiste un programma "OpenFiles", sembra far parte di Windows 7.Sembra che possa fare quello che vuoi.Può elencare i file aperti da utenti remoti (tramite condivisione di file) e, dopo aver chiamato "Openfiles /Local ON" e un riavvio del sistema, dovrebbe essere in grado di mostrare i file aperti a livello locale.Si dice che quest'ultimo abbia penalità di prestazione.
Utilizzare Process Explorer per trovare l'ID del processo.Quindi utilizzare Maniglia per scoprire quali file sono aperti.
Ad esempio, maniglia -p
Mi piace questo approccio perché stai utilizzando le utilità della stessa Microsoft.
In Visualizzazione file aperti, nel menu Opzioni, è presente una voce di menu denominata "Mostra file di rete".Forse con quello abilitato, l'utilità di cui sopra è di qualche utilità.