2012-06-27 20 views
21

No hay escasez de preguntas sobre este tema, pero sigo teniendo problemas. Aquí está mi situación. Tengo un servicio que necesito para ver una ruta que se especifica en el archivo de configuración. Funciona muy bien cuando utilicé un disco local.FileSystemWatcher para ver la ruta UNC

Sin embargo, cuando lo cambio a algo así como \\server2\secondary\temp\watch_folder, el servicio no se inicia. El error en el registro es

El nombre del directorio \\ server2 \ secondary \ temp \ watch_folder no es válido.

Si copio que directamente en el Explorador de Windows la carpeta se abre bien. Si tomo mi código y lo pego en una aplicación antigua de Winforms, funciona bien. He probado todas las cuentas de "Iniciar sesión como". Lo configuré para usar la cuenta de administrador, pero aún no hay dados.

Aquí está mi código:

_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; 

¿Alguna idea? Estoy perdido y en este momento creo que lo he estado mirando demasiado tiempo. Agradezco sinceramente cualquier ayuda.

Gracias, Nick

EDITAR Aquí es la excepción:

servicio no se puede iniciar. System.ArgumentException: el nombre de directorio \ server2 \ Secondary \ temp \ watch_folder no es válido.
en System.IO.FileSystemWatcher.set_Path (valor String)
en FileWatcher.FileWatcher.Watch()
en FileWatcher.FileWatcher.OnStart (String [] args)
en System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (Object estado)

+0

¿Quiere decir que se ha resuelto el problema? –

+0

No, el problema no ha sido resuelto. Todavía no puedo comenzar el servicio. – nickfinity

+1

¿Recibes algún error de excepción? ¿Sabes cómo depurar un servicio de Windows? Cualquier información sobre los errores ayuda. –

Respuesta

18

Acabo de intentar esto:

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(); 

que funciona sin problemas, sin embargo i replicado su excepción justo cuando:

  • El usuario que ejecuta no tiene permisos para leer la carpeta remota.
  • La carpeta remota no existe.

Tu problema seguramente esta relacionado con los permisos, el usuario en ejecución no posee los permisos necesarios.

Otra cosa que puede intentar es asignar la carpeta remota a una local.

ejecutar esto en el cmd:

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

Luego en el código:

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

tuve este problema y que era un problema de permisos en el carpeta. ¡Gracias por la ayuda! – liebs19

+0

Tuve este problema también. Mi servicio con un FileSystemWatcher fue configurado para monitorear una carpeta en una unidad de red como NetworkService, ** y la ruta tiene espacios en ella, así que pensé que ese era el problema. ** Lo estaba ejecutando en mi computadora portátil. Después de leer su respuesta sobre los permisos, instalé el servicio con FileSystemWatcher en el servidor de la aplicación, ¡y el problema desapareció! El servicio tiene los permisos correctos en NetworkService cuando se ejecuta desde ese servidor de aplicaciones. - ¡Respuesta útil! –

5

Su servicio probablemente se está ejecutando con una cuenta de usuario que no tiene permiso para compartir. Intente cambiar el servicio de Windows para ejecutarlo con credenciales diferentes.

0

Es posible que deba tener su trayectoria como

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

Necesita más de dos barras al frente del servidor2 para hacerlo de esa manera: Pruebe \\\\ server2 \\ Secundario \\ temp \\ watch_folder –

0

también me encontré con este problema. Mi solución fue incluir el nombre de dominio de nuestra empresa en la ruta del servidor:

\\servername.company.com\directorytowatch 
Cuestiones relacionadas