Domanda

C'è un modo in .Net per scoprire esattamente quale processo ha bloccato un file?

Modifica : Sto facendo questo perché voglio che il mio all'utente di sapere che essi non possono modificare / aprire il file, perché al momento, un altro programma che stanno usando (come ad esempio Excel) ha aperto. Speriamo che questo aiuta.

È stato utile?

Soluzione

La risposta breve a questa domanda è no.

Tuttavia, la risposta lunga è che ci sono diverse chiamate API e metodi WMI che è possibile utilizzare per trovare queste informazioni, ma non si aspettano che sia semplice e veloce.

Se si desidera utilizzare le chiamate API, date un'occhiata alla NtQuerySystemInformation funzione con il parametro SYSTEM_PROCESS_INFORMATION. Questo è uno di quei bei metodi "senza documenti", che viene fornito con la meravigliosa disclaimer:

  

NtQuerySystemInformation può essere   alterato o non disponibili in futuro   le versioni di Windows. applicazioni   deve utilizzare le funzioni alternative   elencati in questo argomento.

Quindi, vorrei suggerire di evitare che a favore di utilizzare WMI.

È possibile utilizzare il WMI Win32_Process classe per enumerare tutti i processi attualmente in esecuzione sulla macchina, e quindi enumerare tutti gestisce ogni processo è in possesso fino a trovare il file che si sta cercando. Purtroppo non esiste un modo semplice per andare "hey, che processo sta bloccando questo file", funziona solo il contrario si deve cercare l'elenco processo fino a trovare quello che blocca il file che interessa.

mi consiglia un bel articolo su CodeProject intitolato How To: (quasi) Tutto in WMI tramite C # Parte 2: Processi . (Parte 1 è anche una buona lettura se vi piace quel genere di cose)

Altri suggerimenti

Beh ... non è esattamente un modo .NET di farlo ... ma supponendo che si desidera solo per scoprire usando un programma di utilità semplice, controlla Maniglia da Sysinternals .

Sembra che qualcuno ha capito questo fuori (e si può imparare un po 'francese, così :))

http://www.axcis.com.au/bb /viewtopic.php?p=505

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top