2012-08-15 10 views
6

Un programma è in esecuzione su più computer che condividono un'unità di rete. Può utilizzareScopri chi ha bloccato il file su un'unità di rete in C#

... = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read); 

per bloccare un file dalla scrittura. Tutte le altre istanze quindi possono solo leggerle e visualizzare un avviso, che il file non è scrivibile.

Come posso sapere chi (ovvero quale macchina) ha bloccato il file, per visualizzarlo insieme all'avviso?

+0

Se non si dispone dei diritti di amministratore sul computer remoto, non è possibile. La condivisione potrebbe essere semplicemente di sola lettura. –

+1

Supponendo di disporre di privilegi sufficienti sul server di rete, è possibile utilizzare 'NetFileEnum'. –

risposta

3

L'unico modo in cui ho visto questo risultato è per il programma che apre il file per lasciare un file marker, (.lock) o simile. Questo file .lock può quindi contenere ovviamente quello che vuoi (nome utente, macchina ecc.) E può essere letto separatamente.

Questo presuppone che si abbia il controllo del software che lo sta leggendo sull'altro PC.

1

Ecco un post con il codice sorgente C# per un esempio di come esaminare l'elenco dei processi e controllare i file bloccati da ciascun processo.

How does one figure out what process locked a file using C#.

Il passaggio successivo sarebbe utilizzare questa funzionalità all'interno di un servizio su ciascuna macchina in modo che un processo possa inviare una query per un nome file specifico e quindi ricevere una risposta sul fatto che un processo su quella macchina lo abbia bloccato.

I dati possono includere nome processo, ID utente e altre informazioni disponibili dall'elenco dei processi.

Questo approccio è più lavoro, tuttavia quello che fa è fornire un modo per accedere alle informazioni senza che le applicazioni bloccino il file per fare qualcosa di speciale.

D'altra parte se i file che ti interessano sono sotto il tuo controllo e puoi determinare l'accesso ai file, questo è probabilmente eccessivo.

+0

Funzionerà se il processo non si trova sulla stessa macchina? – KingCronus

+0

Mi sto chiedendo la stessa cosa. Da quello che posso dire, la maggior parte del rilevamento dei blocchi si basa sulla possibilità di esaminare l'elenco dei processi e di vedere quali file i vari processi in esecuzione si sono aperti e/o bloccati. Un approccio sarebbe avere un servizio in esecuzione su ogni macchina che fornirebbe un tipo di SNMP o tipo simile di server di query per consentire ad altri processi di interrogare lo stato di apertura/blocco dei file. –

+0

Idea introspettiva. Probabilmente dovrei farlo, se non avessi il controllo sui programmi che potrebbero bloccare il file. Dal momento che ho, i file di blocco suonano più facilmente. – Niklas

Problemi correlati