c# - example - FileSystemWatcher para ver la ruta UNC
filesystemwatcher example c# (5)
No hay escasez de preguntas sobre este tema, pero todavía estoy 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 usé un disco local.
Sin embargo, cuando lo cambio a algo 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 eso directamente en el Explorador de Windows, la carpeta se abre bien. Si tomo mi código y lo pego en una aplicación anterior de Winforms, funciona bien. He intentado todas las cuentas de "Iniciar sesión como". Lo configuré para usar la cuenta de administrador, pero aún no tengo 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;
¿Algunas ideas? Estoy en una pérdida y en este punto creo que lo he estado mirando demasiado tiempo. Sinceramente aprecio cualquier ayuda.
Gracias nick
EDITAR Aquí está la excepción:
El 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 de cadena)
en FileWatcher.FileWatcher.Watch ()
en FileWatcher.FileWatcher.OnStart (String [] args)
en System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback (estado del objeto)
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();
Eso funciona sin problemas, sin embargo, repliqué su excepción cuando:
- El usuario en ejecución no tiene permisos para leer la carpeta remota.
- La carpeta remota no existe.
Su problema seguramente está relacionado con los permisos, creo que el usuario que está corriendo no tiene los permisos necesarios.
Otra cosa que puedes probar es asignar la carpeta remota a un local.
Ejecuta esto en el cmd:
NET USE Z: //server2/Secondary/temp/watch_folder /user:Domain/UserName Password
Luego en su código:
_watcher.Path = @"Z:/";
Encontré una manera realmente genial de obtener UNC con credenciales que trabajan con FileSystemWatcher en un servicio de Windows en un proyecto de código.
vea la publicación de Adrian Hayes: http://www.codeproject.com/Articles/43091/Connect-to-a-UNC-Path-with-Credentials
Su solución funciona de maravilla.
Es posible que tengas que tener tu camino como
//server2//Secondary//temp//watch_folder
Es probable que su servicio se esté ejecutando bajo una cuenta de usuario que no tenga permiso para ese recurso compartido. Intente cambiar el servicio de Windows para que se ejecute bajo diferentes credenciales.
También me encontré con este problema. Mi solución fue incluir el nombre de dominio de nuestra compañía en la ruta del servidor:
//servername.company.com/directorytowatch