lunes, 24 de junio de 2013

Tareas de WatchDirectory como servicios de Windows

Q&A

Aquí encontrará algunos consejos si tiene problemas al ejecutar una tarea de WatchDirectory como un servicio de Windows.

Asegúrese que la tarea funciona

Como primer paso, asegúrese que la tarea funciona correctamente cuando se inicia de forma manual (No como un servicio de Windows). Configure How to Run a Manually. Cuando la tarea funcione correctamente de forma "Manual", siga leyendo.

Carpetas en red

Si su tarea solo trabaja con "carpetas locales" (generalmente C:\ ó D:\), puede saltarse esto. Si su tarea accede a discos de otros equipos ("La Red"), siga leyendo.

El servicio de Windows creado por WatchDirectory se ejecuta como el usuario "Local System". ¿Se ha fijado en la palabra "Local"? La tarea no puede acceder a ningún recurso de red. Solo son accesibles las carpetas del equipo sobre el que se está ejecutando la tarea. Así que si tiene una tarea que lee (monitorea) o escribe en carpetas de red, debe cambiar el usuario que ejecuta esta tarea a alguno que tenga acceso a estas carpetas, vea Change the User (últimos párrafos de este post).

P:\

¿Accede a Carpetas de red mapeadas? Tenga en cuenta que las carpetas mapeadas (generalmente del tipo P:\ ó X:\) son establecidas por Windows dependiendo del usuario conectado en ese momento ("logged in user"). Debe considerar también que, dependiendo de la versión de Windows, estas carpetas mapeadas no son accesibles a los Servicios incluso si se cambia el usuario "Change the User" del servicio. Utilice siempre nomenclatura UNC para definir carpetas de red (\\Servidor\NombreCompartido\Carpeta en lugar de P:\Carpeta).

Permisos compartidos de red

Cuando se comparte una carpeta en red, las versiones antiguas de Windows concedían por defecto Control total (lectura, escritura, borrado...) a cualquiera que tuviera permisos de acceso a la carpeta compartida. Las versiones actuales de Windows solo conceden por defecto permisos de acceso de solo lectura. Si su tarea debe escribir en una carpeta compartida en red, compruebe si el Usuario ejecutando la tarea tiene los privilegios adecuados.

Archivos de guión ("Batch")

Todas las consideraciones mencionadas anteriormente para carpetas de red aplican también a cualquier archivo bat/cmd que deba ejecutarse. Acceda a las carpetas de red utilizando siempre nomenclatura UNC para definir el nombre de las rutas (\\servidor\recurso compartido\carpeta \archivo.txt).

RUTA
Tenga en cuenta que la RUTA predeterminada de Windows, donde Windows puede encontrar los archivos ejecutables requeridos, depende del usuario conectado (el usuario que "ejecuta" la tarea WD). Si su archivo "script" depende de programas que deben encontrarse en su RUTA, puede que deba cambiar la RUTA en su archivo BAT:

SET PATH=C:\Mis Binarios;%PATH%

Utilice la ruta completa para los archivos
Si actualmente tiene comandos del tipo

Hazlo.exe "%WD_FILE%"

en su "script", asumiendo que Hazlo.exe se encuentra en la carpeta actual o en su RUTA, cámbielo a

"C:\Archivos de Programa\Empresa madre\Hazlo.exe" "%WD_FILE%"

Nota: %WD_FILE% contiene la ruta completa al archivo detectado, vea Environment Variables.

No dependa de la carpeta de trabajo o actual
Debería considerar la carpeta "actual" (o "de trabajo") como aleatoria cuando su "script" sea iniciado. Por eso, si necesita una carpeta de trabajo específica, su "script" debería asignarla siempre.

Imprimir

Igual que para las carpetas mapeadas, las impresoras son mantenidas por Windows de forma separada para cada cuenta de usuario. Vea el último párrafo de este post: Printing from a Windows Service.

Cambiar el usuario para el Servicio de WatchDirectory

Actualmente no es posible cambiar el usuario que ejecuta el servicio de Windows desde el Centro de Control de WatchDirectory. Se debe cambiar desde la ventana "Servicios de Windows" del control de Applets de Windows:

  • Desde el Centro de Control de WatchDirectory seleccione el menú "Tools -> Windows Services"
  • Abra la configuración para el servicio con el nombre watchDirectory:ElNombreDeSuTareaWatchDirectory
  • Cambie el usuario/contraseña para el servicio

Una próxima versión de WatchDirectory permitirá cambiar esta configuración de usuario/contraseña de forma más sencilla, desde el propio Centro de Control de WD.

Quizá podría ser una buena idea crear un nuevo (Dominio) usuario específico para sus tareas WD llamado WatchDirectory. Un detalle importante para este usuario es asignar la característica "no caduca nunca" a su contraseña. Si se configura para que la contraseña caduque, deberá cambiar la contraseña para todas las tareas de WatchDirectory cada mes...