Trova quale processo ha bloccato un file senza strumenti di terze parti

Quando si tenta di eliminare un file o una cartella utilizzati da un processo, viene visualizzata la finestra di dialogo File in uso che mostra il nome del programma che ha bloccato il file.

Tuttavia, ci sono casi in cui la finestra di dialogo "File in uso" non mostra il nome del processo che ha un blocco sul file che si sta tentando di eliminare. In alcuni casi, la finestra di dialogo mostrerà "l'azione non può essere completata perché il file è aperto in un altro processo ".

Per l'analisi dei processi e dei file bloccati, Esplora processi di Windows Sysinternals è probabilmente la prima opzione che viene in mente per la maggior parte degli utenti. Tuttavia, esistono due soluzioni integrate per visualizzare l'elenco dei file aperti corrente insieme ai nomi dei processi corrispondenti.

$config[ads_text6] not found

1. Monitoraggio risorse

Resource Monitor (resmon.exe) è uno strumento integrato con molte funzioni utili. Con Resource Monitor è possibile tenere traccia dell'uso corrente della rete e di Internet, visualizzare gli handle associati per i file bloccati e gestire i processi proprio come si farebbe con Task Manager.

Per trovare il nome del processo con un file bloccato, fare clic sulla scheda CPU, digitare il nome del file o parte di esso nella casella di testo Maniglie associate.

Abbiamo coperto Resource Monitor in precedenza. Dai un'occhiata a questi articoli:

  • Come utilizzare Monitor risorse per trovare quale processo ha bloccato un file?
  • Quale programma utilizza tutta la larghezza di banda di Internet? Usa Monitor risorse per trovarlo

2. Process Explorer

Process Explorer non ha bisogno di presentazioni. In Process Explorer, tutto ciò che devi fare è utilizzare la funzione Trova e digitare il nome del file. Questo mostra il processo che sta accedendo al file.

Dalla vista del riquadro inferiore, è possibile chiudere l'handle del file, se necessario.

È necessario eseguire Process Explorer come amministratore per gestire i processi in esecuzione elevata. Per elevare Process Explorer, fare clic sul menu File → Mostra dettagli per tutti i processi .

Dai un'occhiata a questi articoli relativi a Process Explorer:

  • Come eliminare un file o una cartella non eliminabili testardi in Windows?
  • Trova quale programma utilizza attualmente la tua webcam
  • Come trovare quale programma ha causato un messaggio di errore sconosciuto?
  • Che cosa significa non riuscire a enumerare gli oggetti nel contenitore?

3. Gestire da Windows Sysinternals

Handle è un'utilità di Microsoft Sysinternals che visualizza informazioni sugli handle aperti per qualsiasi processo nel sistema. Puoi usarlo per vedere i programmi che hanno un file aperto o per vedere i tipi di oggetto e i nomi di tutti gli handle di un programma. Handle è come una versione da riga di comando di Process Explorer.

Nota: Handle v4.21 ha un piccolo bug in cui riporta sempre "Nessun handle corrispondente trovato" se la lettera di unità è in maiuscolo. Spero che Microsoft lo risolva nel prossimo aggiornamento.

Da una finestra del prompt dei comandi dell'amministratore, utilizzare la sintassi della riga di comando per trovare il processo in cui il file è aperto:

 handle.exe -a -u nome_file_percorso 

Se il nome del file contiene spazi, racchiuderlo tra virgolette doppie.

Esempio:

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

(Menzionare il nome del file senza il percorso potrebbe non funzionare necessariamente in ogni situazione. È consigliabile includere sempre il percorso completo).

L'output mostra il nome del processo, l'identificatore del processo, il nome utente, il nome del file bloccato (destinazione) con percorso.

Sysinternals Handle: argomenti della riga di comando

 utilizzo: handle [[-a [-l]] [-u] | [-c [-y]] | [-s]] [-p |] [nome] [-nobanner] 
-unScarica tutte le informazioni sulla gestione.
-lMostra solo le maniglie di sezione supportate da file di paging.
-cChiude l'handle specificato (interpretato come un numero esadecimale).

È necessario specificare il processo tramite il suo PID. ATTENZIONE: la chiusura degli handle può causare instabilità dell'applicazione o del sistema.

-yNon richiedere la conferma dell'handle ravvicinato.
-SStampa il conteggio di ogni tipo di maniglia aperta.
-uMostra il nome utente proprietario durante la ricerca di handle.
-pGestori di dump appartenenti al processo (nome parziale accettato).
nomeCerca le maniglie sugli oggetti con (frammento accettato).
-nobannerNon visualizzare il banner di avvio e il messaggio di copyright.
$config[ads_text6] not found

Nessun argomento scaricherà tutti i riferimenti ai file.

Aggiungi Sysinternals Handle al menu di scelta rapida

È possibile aggiungere Sysinternals Handle al menu di scelta rapida per i file per trovare rapidamente il programma che ha bloccato il file. Per aggiungerlo al menu di scelta rapida, attenersi alla seguente procedura:

  1. Scarica Handle dal sito Microsoft Sysinternals.
  2. Copia i file handle.exe e handle64.exe in una cartella, ad esempio d:\tools
  3. Copia le seguenti righe di codice su Blocco note e salva il file come find_handle.vbs in una posizione permanente.
     'Esegue l'utilità Handle.exe di Sysinternals con argomento nome file. '© Ramesh Srinivasan - //winhelponline.com/blog' Data di creazione: 29 marzo 2008 'Data di aggiornamento: 11 giu 2019' Per tutte le versioni di Windows, inclusa l'opzione Windows 10 Dim esplicita objShell, WshShell, objFSO, sBaseKey, sFilename Set objShell = CreateObject ("Shell.Application") Set WshShell = CreateObject ("WScript.Shell") Set objFSO = CreateObject ("Scripting.FileSystemObject") Se WScript.Arguments.Count = 0 Quindi sBaseKey = "HKCU \ Software \ Classi \ * \ shell \ "WshShell.RegWrite sBaseKey &" FindHandle \ ", " Trova handle ", " REG_SZ "WshShell.RegWrite sBaseKey &" FindHandle \ command \ ", " wscript.exe "&" "" "& _ WScript .ScriptFullName & "" "" & "" & "" "" & "% 1" & "" "", "REG_SZ" Else If objFSO.FileExists (WScript.Arguments (0)) = True Then sFilename = lcase (WScript .Arguments (0)) objShell.ShellExecute "cmd.exe", "/kd:\tools\handle.exe -a -u" & _ "" "& s Nome file &" "" ", " ", " runas ", 1 End If End If 

    Nota: il percorso Sysinternals Handle.exe è codificato come d:\tools\handle.exe nello script precedente. Se il programma si trova su un percorso diverso, modificare di conseguenza il percorso nello script. Per Windows a 64 bit, è possibile utilizzare handle.exe o handle64.exe

  4. Fare doppio clic su find_handle.vbs per aggiungere la voce del menu contestuale nel registro. Dovrai farlo solo una volta. Tuttavia, se si sposta lo script in un'altra cartella, è necessario fare nuovamente doppio clic per aggiornare il percorso nel registro.
  5. Vedrai l'opzione Trova handle quando fai clic con il pulsante destro del mouse su un file. Facendo clic su di esso verrà avviato lo script che a sua volta esegue handle.exe con l'argomento nome file per trovare il processo in cui il file è bloccato.

Per rimuovere la voce del menu contestuale Trova handle, avviare l'editor del registro ( regedit.exe ) ed eliminare la seguente chiave:

 HKEY_CURRENT_USER \ Software \ Classes \ * \ shell \ FindHandle 

4. OpenFiles.exe - uno strumento console integrato

Un altro strumento integrato che useremo è Openfiles.exe, uno strumento console non nuovo per Windows. È stato originariamente introdotto nel 2000 come parte degli strumenti di Windows Resource Kit 2000/2003. Questa utility è stata quindi inclusa per impostazione predefinita in Windows Vista e versioni successive (incluso Windows 10). Openfiles visualizza l'elenco dei file attualmente aperti da cartelle locali o condivise, insieme all'ID handle e al nome dell'eseguibile del processo. Questo strumento consente inoltre di disconnettere uno o più file aperti in remoto da una cartella condivisa.

Abilitare il flag globale "Mantieni elenco oggetti" per la prima volta

Innanzitutto, per abilitare il tracciamento degli handle di file locali, è necessario attivare il flag "mantieni elenco oggetti" eseguendo il comando seguente dal prompt dei comandi admin.

 openfiles / local on 

Vedrai il seguente messaggio:

INFO: il flag globale di sistema 'conserva elenco oggetti' è attualmente abilitato.

Dovrai eseguire questo comando solo per la prima volta. Quindi riavviare Windows per rendere effettive le modifiche.

Visualizza i file aperti e i nomi dei processi corrispondenti

Dopo aver riavviato Windows, da una finestra del prompt dei comandi dell'amministratore, digitare:

 openfiles 

Questo elenca l'ID file / handle, il nome del processo e l'elenco dei file aperti localmente o aperti in remoto tramite punti di condivisione locali, in un formato tabella.

Per visualizzare l'output nei formati Elenco o CSV, utilizzare il parametro / query.

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

Per copiare l'output negli Appunti, reindirizzare l'output a Clip.exe come di seguito. Quindi incolla l'output in Blocco note o in qualsiasi altro editor a tua scelta.

 openfiles | clip 

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

Per ulteriori informazioni sulla copia dell'output del prompt dei comandi negli Appunti o nel salvataggio dell'output in un file, consultare l'articolo Come copiare il testo dell'output del prompt dei comandi negli Appunti o Salva su file?

Per sapere se un determinato file viene utilizzato da un programma (e per sapere quale programma), è possibile utilizzare la seguente riga di comando.

 file aperti | findstr / i 

Esempio:

 file aperti | findstr / i eiffel 

Il comando sopra elenca tutti i file aperti che contengono la parola "eiffel" nel nome del file. In questo esempio, Word 2016 sta attualmente bloccando il file "The Eiffel Tower.docx" (ID 4576).

$config[ads_text6] not found

E la finestra di dialogo "File in uso" mi dice la stessa cosa.

Disconnetti i file aperti in remoto dalla cartella condivisa.

Per disconnettere i file aperti dalla cartella condivisa in modo da poter eliminare, rinominare il file o modificare il contenuto, utilizzare il parametro /disconnect per tagliare le connessioni a quel file. Ecco le opzioni della riga di comando.

 OPENFILES / Disconnect [/ S system [/ U username [/ P [password]]]] {[/ ID ID] [/ A accessby] [/ O openmode]} [/ OP openfile] Descrizione: consente a un amministratore di disconnettere i file e cartelle che sono state aperte in remoto tramite una cartella condivisa. Elenco parametri: / S system Specifica il sistema remoto a cui connettersi. / U [dominio \] utente Specifica il contesto utente in cui eseguire il comando. / P [password] Specifica la password per il contesto utente specificato. / ID ID Specifica di disconnettere i file aperti tramite ID file. È possibile utilizzare il carattere jolly "*". / A accessby Specifica di disconnettere tutti i file aperti in base al valore "accessby". È possibile utilizzare il carattere jolly "*". / O openmode Specifica di disconnettere tutti i file aperti dal valore "openmode". I valori validi sono Leggi, Scrivi o Leggi / Scrivi. È possibile utilizzare il carattere jolly "*". / OP openfile Specifica di disconnettere tutte le connessioni di file aperte create con uno specifico nome "file aperto". È possibile utilizzare il carattere jolly "*". /? Visualizza questo messaggio di aiuto. Esempi: OPENFILES / Disconnect /? OPENFILES / Disconnect / ID 1 OPENFILES / Disconnect / A username OPENFILES / Disconnect / O Leggi / Scrivi OPENFILES / Disconnect / OP "c: \ My Documents \ somedoc.doc" / ID 234 OPENFILES / Disconnect / S system / U username / ID 5 OPENFILES / Disconnect / S system / U username / P password / ID * 

Openfiles.exe svolge perfettamente il compito di elencare tutti i file aperti insieme ai nomi dei processi, ma non può uccidere forzatamente i processi. Tuttavia, questo eccellente strumento per console integrato (ma trascurato) può tornare utile quando si desidera trovare rapidamente un nome di processo che utilizza un file o per disconnettere un file a cui accede un utente di rete tramite una cartella condivisa, senza dipendere su una soluzione di terze parti.

5. OpenedFilesView

OpenedFilesView di Nirsoft visualizza l'elenco di tutti i file aperti sul sistema. Per ogni file aperto, vengono visualizzate informazioni aggiuntive: gestione del valore, accesso in lettura / scrittura / eliminazione, posizione del file, processo che ha aperto il file e altro ... Facoltativamente, è anche possibile chiudere uno o più file aperti o chiudere il processo che ha aperto questi file.

È possibile chiudere i processi dei file selezionati o chiudere gli handle di file selezionati. Il numero di handle è rappresentato in valori esadecimali mentre lo strumento console openfiles.exe lo mostra nel formato normale. Questo strumento consente inoltre di aggiungere un'opzione di menu di scelta rapida per trovare rapidamente il processo che sta attualmente utilizzando un file, tramite il menu di scelta rapida. L'opzione del menu di scelta rapida / supporto della riga di comando, ritengo, sia una delle funzionalità più utili offerte da OpenedFilesView.

Articoli Correlati