Come trovi quale processo tiene aperto un file in Windows?


515

Una cosa che mi infastidisce di Windows è il vecchio errore di violazione della condivisione . Spesso non è possibile identificare ciò che lo tiene aperto. Di solito è solo un editor o un esploratore che punta solo a una directory pertinente, ma a volte ho dovuto ricorrere al riavvio della mia macchina.

Qualche suggerimento su come trovare il colpevole?


12
Penseresti che dopo tutto questo tempo, i ragazzi di Windows ci avrebbero dato un modo per farlo facilmente da Explorer. Mi chiedo perché questo non sia successo?
Cawflands,

6
Trovo che Explorer sia molto spesso il processo problematico che si tiene su un file senza una ragione ovvia.
Eddie,

So che questo non ti aiuta molto, ma penso di aver ricordato che questa era una funzionalità pianificata della prossima versione di Windows dopo Vista e il server 2008. o forse è una cosa di WinFS. non sono sicuro di dove l'ho letto ...
Kip,

vedi la mia risposta su superutente qui , in sintesi OpenedFilesView funziona ancora nel 2019
Vijay

Risposte:


440

Ho avuto successo con Sysinternals Process Explorer . Con questo, puoi cercare per trovare quale processo (i) ha un file aperto e puoi usarlo per chiudere gli handle se vuoi. Certo, è più sicuro chiudere l'intero processo. Esercitare cautela e giudizio.

Per trovare un file specifico, utilizzare l'opzione di menu Find->Find Handle or DLL... Digita in parte del percorso del file. L'elenco dei processi verrà visualizzato di seguito.

Se si preferisce la riga di comando, la suite Sysinternals include la maniglia della riga di comando , che elenca le maniglie aperte. Alcuni esempi su come usarlo:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - trova tutti i file aperti dall'unità E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question

17
Puoi chiudere la maniglia, ma tieni presente che stai estraendo il tappeto da un'applicazione, i risultati saranno al massimo imprevedibili.
WaldenL,

12
@Walden: assolutamente. YMMV. Con WinXP, Explorer ha aperto molte volte un handle senza una ragione ovvia e si è rifiutato di chiuderlo. Quando ciò accade su un file che è necessario eliminare, è possibile scegliere di forzare la chiusura dell'handle o il riavvio. Finora, dopo averlo fatto decine di volte, non ho subito alcun effetto negativo. Come con qualsiasi strumento avanzato, utilizzare con cautela e giudizio.
Eddie,

5
La chiusura degli handle può far sì che l'app riutilizzi l'handle su un altro file, causando corruzione: vedere la risposta di Jeff di seguito: serverfault.com/a/15695/79266 ... molto più sicuro uccidere l'applicazione tenendo aperto il file, se si non voglio riavviare.
RichVel

14
Per explorer, btw, tieni premuto ctrl-shift e fai clic con il pulsante destro del mouse su un'area vuota del menu di avvio, e otterrai "Exit Explorer" - ps, non proprio la risposta di Jeff ..
Mark Sowul

2
Non aiuta i file non esecutivi in ​​un file di testo. Devo sapere chi sta scrivendo in un file di registro. Qualche idea?
Xaqron,

183

È possibile utilizzare Resource Monitor per questo che è integrato con Windows 7, 8 e 10.

  1. Apri Monitor risorse , che puoi trovare
    • Con la ricerca di monitor di risorse o resmon.exe nel menu di avvio, o
    • Come pulsante nella scheda Prestazioni nel Task Manager
  2. Vai alla scheda CPU
  3. Utilizzare il campo di ricerca nella sezione Maniglie associate
    • Vedi la freccia blu nella schermata qui sotto

Quando hai trovato l'handle, puoi identificare il processo guardando la colonna Immagine e / o PID.

Puoi quindi provare a chiudere l'applicazione come faresti normalmente oppure, se ciò non è possibile, fai clic con il pulsante destro del mouse sulla maniglia e termina il processo direttamente da lì. Vai tranquillo!

Schermata Monitor risorse

Copiato dalla mia risposta originale: https://superuser.com/a/643312/62


2
Vale la pena notare che può essere difficile trovare questo programma su Windows 8: una ricerca di 'resmon.exe' dovrebbe trovarlo.
Kylotan,

4
@Kylotan, smetti di perdere tempo a cercare. Basta eseguire resmon direttamente da cmd
Pacerier

1
@Pacerier: Nice. Non sono abituato a trovarmi nel percorso di Windows.
Kylotan,

Questo mi si addice meglio di "Gestisci | Alternative FindStr 'e' Unlocker ', anche se sono anche efficaci
Marcus Vinicius Pompeu

4
È ancora valido in Windows 10 e può essere trovato utilizzando il pulsante "Apri monitoraggio risorse" all'interno di Task Manager -> scheda Prestazioni.
Norman Breau,

92

Prova il comando openfiles .


10
+1 per un comando incorporato, anche se uso personalmente ProcessExplorer per questo il più delle volte.
RBerteig,

Davvero utile.
marko,

7
ERRORE: il sistema di destinazione deve eseguire un sistema operativo a 32 bit.
Bozojoe,

4
non funziona per 64 OS!

12
Sembra funzionare per Windows 2012 R2 64 bit, ma è necessario abilitare il servizio "Apri local tracking" eseguendo openfiles /local one riavviando. Questo rende questa funzione non molto utile.
Guss,

82

Stai molto attento con le maniglie di chiusura; è ancora più pericoloso di quanto pensi, a causa del riciclaggio dell'handle: se chiudi l'handle del file e il programma apre qualcos'altro, quel handle di file originale che hai chiuso può essere riutilizzato per quel "qualcos'altro". E ora indovina cosa succede se il programma continua, pensando che stia funzionando sul file (di cui hai chiuso l'handle), quando in realtà quell'handle di file punta ora a qualcos'altro.

vedi il post di Raymond Chen su questo argomento

Supponiamo che un servizio di indice di ricerca abbia un file aperto per l'indicizzazione ma si sia bloccato temporaneamente e si desideri eliminare il file, quindi forzare (involontariamente) la chiusura dell'handle. Il servizio dell'indice di ricerca apre il suo file di registro per registrare alcune informazioni e l'handle nel file eliminato viene riciclato come handle nel file di registro. L'operazione bloccata viene infine completata e il servizio dell'indice di ricerca alla fine riesce a chiudere quel handle aperto, ma finisce involontariamente chiudendo l'handle del file di registro.

Il servizio dell'indice di ricerca apre un altro file, ad esempio un file di configurazione per la scrittura in modo che possa aggiornare alcuni stati persistenti. L'handle per il file di registro viene riciclato come handle per il file di configurazione. Il servizio dell'indice di ricerca desidera registrare alcune informazioni, quindi scrive nel suo file di registro. Sfortunatamente, l'handle del file di registro è stato chiuso e l'handle è stato riutilizzato per il suo file di configurazione. Le informazioni registrate vanno nel file di configurazione, corrompendole.

Nel frattempo, un altro handle che hai forzato chiuso è stato riutilizzato come handle mutex, utilizzato per impedire la corruzione dei dati. Quando viene chiuso l'handle del file originale, viene chiuso l'handle del mutex e si perdono le protezioni contro il danneggiamento dei dati. Più a lungo viene eseguito il servizio, più gli indici vengono danneggiati. Alla fine, qualcuno nota che l'indice sta restituendo risultati errati. E quando si tenta di riavviare il servizio, non riesce perché i suoi file di configurazione sono stati danneggiati.

Si segnala il problema alla società che effettua il servizio dell'indice di ricerca e determinano che l'indice è stato danneggiato, il file di registro ha interrotto misteriosamente la registrazione e il file di configurazione è stato sovrascritto con garbage. Ad un povero tecnico viene assegnato il compito senza speranza di capire perché il servizio corrompe gli indici e i file di configurazione, ignaro del fatto che l'origine della corruzione è che hai forzato la chiusura di un handle.


12
avvertimento importante, questo dovrebbe avvicinarsi all'inizio - un riavvio è probabilmente migliore di un file corrotto silenziosamente.
RichVel

6
+1 Questo mi farà sicuramente pensare due volte a forzare le maniglie chiuse! Mi sembra strano che Windows riutilizzi immediatamente il numero di un handle chiuso, invece di continuare ad aumentare il numero e spostarsi solo quando necessario. Ciò ridurrebbe almeno notevolmente le possibilità che questo problema si verifichi.
EM0,

1
@RichVel Terminare il processo del colpevole è probabilmente meglio di un riavvio completo.
Dmitry Grigoryev

@DmitryGrigoryev - buon punto, e in effetti l'ho già menzionato qui
RichVel

2
Questo è un avvertimento molto importante, ma non risponde alla domanda Come si trova quale processo tiene aperto un file in Windows?
Ploni,

29

Ho usato Handle con successo per trovare tali processi in passato.


3
Uso sempre questo strumento. Se non riesco a espellere un'unità USB, digito semplicemente "handle H:" (o qualunque sia la lettera dell'unità). Soprattutto, puoi usarlo per forzare le maniglie chiuse.
Chris Thompson,



7

Giusto per chiarire, è più probabile che questo sia il risultato di comportamenti errati delle app di terze parti che non utilizzano correttamente la chiamata API CreateFile di quanto non lo siano in Windows stesso. Forse è una conseguenza del design di CreateFile, ma fatto è fatto e non possiamo tornare indietro.

Fondamentalmente quando si apre un file in un programma Windows hai la possibilità di specificare un flag che consenta l'accesso condiviso. Se non si specifica il flag, il programma accede in modo esclusivo al file.

Ora, se Explorer sembra essere il colpevole qui, potrebbe essere il caso che sia solo in superficie e che il vero colpevole sia qualcosa che installa un'estensione shell che apre tutti i file in una cartella per i propri scopi ma è anche gung-ho nel farlo, o che non si ripulisce correttamente dopo se stesso. Symantec AV è qualcosa che ho già visto fare prima, e non sarei sorpreso se anche altri programmi AV fossero da biasimare. Anche i plug-in di controllo del codice sorgente potrebbero essere difettosi.

Quindi non proprio una risposta, ma solo alcuni consigli per non incolpare sempre Windows per quello che potrebbe essere un programma di terze parti scritto male (qualcosa che può accadere anche su qualsiasi altro sistema operativo che ha il blocco implicito dei file, ma qualsiasi sistema operativo basato su unix ha accesso condiviso da predefinito).


1
Non incolperò un'app di terze parti sul fatto che il mio windows explorer blocca sempre i file Thumbs.db nella sua directory di lavoro, ma non lo sblocco sempre quando cambio directory di lavoro. Almeno vengono sbloccati quando chiudo la finestra, non devo uccidere TUTTI gli esploratori ...
Alexander

@Darth, sei un marketer di Microsoft?
Pacerier,

6

Su un server remoto, quando si controlla una condivisione di rete, qualcosa di semplice come la console Gestione computer può visualizzare queste informazioni e chiudere il file.


Esatto, perché ci sono risposte così complicate?
Rohit Gupta,

6

Apropos Explorer con un file aperto: "Quando questo accade su un file che devi eliminare, hai la possibilità di forzare la chiusura dell'handle o il riavvio".

Puoi semplicemente terminare Explorer.

Se questa è una cosa singola (Explorer normalmente non tiene aperto questo file), immagino che disconnettersi e riconnettersi farà il trucco.

Altrimenti, uccidi il processo di desktop Explorer e fai quello che vuoi mentre non c'è più. Innanzitutto avvia una copia di cmd.exe (è necessaria un'interfaccia utente per eseguire la pulizia prevista). Assicurarsi che non siano in esecuzione Explorer non desktop. Quindi uccidi l'ultimo Explorer con, ad esempio, Task Manager. Fai quello che vuoi nel prompt dei comandi. Infine, esegui Explorer dal prompt dei comandi e diventerà il desktop.

Immagino che potrebbe esserci qualche spiacevolezza residua se alcuni programmi systray non riescono a gestire il riavvio della shell.


1
Questo è molto più sicuro della chiusura della maniglia e meno distruttivo del riavvio. Si applica anche ad altri programmi: trovo spesso che un programma di Microsoft Office contenga blocchi sui file anche dopo averli chiusi.
RichVel

5

I file possono essere bloccati dai processi locali (lo sblocco è lo strumento da utilizzare) e dall'accesso ai file che arriva attraverso le condivisioni.

Esiste una funzione integrata in Windows che mostra quali file sul computer locale sono aperti / bloccati dal computer remoto (che ha il file aperto tramite una condivisione file):

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

Lì puoi persino chiudere il file con forza.




2

Le risposte sopra elencate riguardano situazioni in cui un processo del programma tiene aperto l'handle del file, che (fortunatamente) è per la maggior parte del tempo, tuttavia in alcuni casi (come accade attualmente su questo sistema), il sistema stesso mantiene un handle di file Aperto.

È possibile identificare questa situazione seguendo le istruzioni per trovare il processo di gestione dell'handle di file con Process Explorer sopra e notando che il nome del processo è elencato come 'sistema', oppure seguendo le istruzioni usando il monitoraggio delle risorse e notando che non viene mostrata alcuna immagine avere un filehandle aperto sul tuo file di interesse (anche se ovviamente qualcosa fa come non puoi modificare / cancellare ecc il file).

In tal caso, l'opzione (per quanto ne so) è quella di riavviare o dimenticare di fare qualsiasi cosa con quel file.


0

Un attimo fa mi sono rivolto a Exteneded Task Manager dal blog di Jeremy Zawodny, ed è ottimo per rintracciare ulteriori informazioni anche sui processi. +1 anche per Process Explorer come sopra, soprattutto per l'uccisione di processi che il Task Manager standard non terminerà.


0

C'è uno strumento FILEMON e mostra file e handle aperti. È difficile tenere il passo con il suo display se lo guardi dal vivo, lo fa così rapidamente. Ma puoi impedirne la visualizzazione dal vivo e puoi guardare tutte le attività di apertura / scrittura dei file. Ora di proprietà di Microsoft ma originariamente di Sysinternals


1
La versione aggiornata di questo è monitor di processo. Puoi
scaricarlo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.