2012-06-27 16 views
21

Non c'è carenza di domande su questo argomento, ma ho ancora problemi. Ecco la mia situazione. Ho un servizio che ho bisogno di guardare un percorso che è specificato nel file di configurazione. Funziona benissimo quando ho usato un disco locale.FileSystemWatcher per guardare il percorso UNC

Tuttavia, quando lo cambio in qualcosa come \\server2\secondary\temp\watch_folder il servizio non viene avviato. L'errore nel registro è

Il nome della directory \\ server2 \ secondary \ temp \ watch_folder non è valido.

Se lo copio direttamente in Esplora risorse, la cartella si apre correttamente. Se prendo il mio codice e lo incollo in una vecchia app Winforms, funziona perfettamente. Ho provato tutti gli account "Accedi come". L'ho impostato per utilizzare l'account Administrator, ma ancora nessun dado.

Ecco il mio codice:

_watcher = new FileSystemWatcher(); 
_watcher.Path = ConfigurationManager.AppSettings["WatchFolder"]; 
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; 
_watcher.Filter = "*.txt"; 
_watcher.Created += new FileSystemEventHandler(OnCreated); 
_watcher.Error += new ErrorEventHandler(OnError); 
_watcher.EnableRaisingEvents = true; 

Tutte le idee? Sono in perdita e a questo punto penso di averlo guardato troppo a lungo. Apprezzo sinceramente qualsiasi aiuto.

Grazie, Nick

EDIT Ecco l'eccezione:

Il servizio non può essere avviato. System.ArgumentException: il nome della directory \ server2 \ Secondary \ temp \ watch_folder non è valido.
al System.IO.FileSystemWatcher.set_Path (valore String)
a FileWatcher.FileWatcher.Watch()
a FileWatcher.FileWatcher.OnStart (String [] args)
a System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (Object stato)

+0

Vuoi dire che il problema è stato risolto? –

+0

No, il problema non è stato risolto. Non sono ancora in grado di avviare il servizio. – nickfinity

+1

Ricevi errori di eccezione? Sai come eseguire il debug di un servizio di Windows? Qualsiasi informazione sugli errori aiuta. –

risposta

18

Ho appena provato questo:

var _watcher = new FileSystemWatcher(); 
_watcher.Path = @"\\10.31.2.221\shared\"; 
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; 
_watcher.Filter = "*.txt"; 
_watcher.Created += new FileSystemEventHandler((x, y) =>Console.WriteLine("Created")); 
_watcher.Error += new ErrorEventHandler((x, y) =>Console.WriteLine("Error")); 
_watcher.EnableRaisingEvents = true; 
Console.ReadKey(); 

che funziona senza problemi, però ho replicato il tuo un'eccezione solo quando:

  • L'utente che esegue non dispone delle autorizzazioni per leggere la cartella remota.
  • La cartella remota non esiste.

Il tuo problema è sicuramente legato alle autorizzazioni, penso che l'utente in esecuzione non disponga delle autorizzazioni necessarie.

Un'altra cosa che si può provare è mappare la cartella remota ad una locale.

Eseguire questa nel cmd:

NET USE Z: \\server2\Secondary\temp\watch_folder /user:Domain\UserName Password 

Poi nel codice:

_watcher.Path = @"Z:\"; 
+1

Ho avuto questo problema ed era un problema di autorizzazione sul cartella. Grazie per l'aiuto! – liebs19

+0

Ho avuto anche questo problema. Il mio servizio con FileSystemWatcher è stato impostato per monitorare una cartella su un'unità di rete come NetworkService, ** e il percorso contiene degli spazi, quindi ho pensato che fosse il problema. ** Lo stavo usando sul mio laptop. Dopo aver letto la tua risposta sulle autorizzazioni, ho installato il servizio con FileSystemWatcher sul server dell'app e il problema è scomparso! Il servizio ha le autorizzazioni giuste in NetworkService durante l'esecuzione da quel server dell'app. - Risposta utile! –

5

Il servizio è probabilmente in esecuzione con un account utente che non dispone dell'autorizzazione per tale condivisione. Prova a cambiare il servizio di Windows per eseguirlo con credenziali diverse.

0

Potrebbe essere necessario avere il vostro percorso come

\\server2\\Secondary\\temp\\watch_folder 
+0

Per eseguire questa operazione sono necessarie più di due barre davanti al server2: Prova \\\\ server2 \\ Secondario \\ temp \\ watch_folder –

0

Ho anche incontrato questo problema. La mia correzione era di includere il nome di dominio della nostra azienda nel percorso del server:

\\servername.company.com\directorytowatch 
Problemi correlati