Saltar al contenido

¿Aplicación de consola programada vs servicio de Windows? ¿Cuándo es apropiado usar cada

Te damos la respuesta a esta escollo, o por lo menos eso creemos. Si sigues con interrogantes puedes escribirlo en el apartado de comentarios y sin dudas

Solución:

Para aplicaciones de propósito único o limitado ejecutado en un horario, ejecutar una aplicación de consola a través del Programador de tareas es casi siempre el diseño correcto.

Para tareas largas o complejas que pueden necesitar interacción como inicio manual, parada, pausa, continuación, etc. entonces, en general, un servicio de Windows es la mejor opción.

Las tareas programadas se pueden ejecutar con cualquier cuenta y no es necesario que un usuario inicie sesión como en Servicios. Para tareas de un solo propósito, como las que propone, el control externo de la tarea suele ser irrelevante, por lo que no necesita la capacidad de control de un Servicio.

Un factor importante también es que el Programador de tareas es un programador basado en eventos muy sólido y flexible. Es extremadamente improbable que pueda escribir un programador que sea más robusto y pueda manejar los caprichos del tiempo y la programación basada en disparadores. De hecho, hay una serie de preguntas sobre el uso de temporizadores para programar tareas en los servicios de este sitio y es notable la cantidad de respuestas (incluidas algunas de las respuestas ‘correctas’) que son de mala calidad o totalmente incorrectas.

EDITAR: También es interesante notar que la política de Microsoft se está alejando del uso de servicios para acciones basadas en tareas. Si revisa Vista, Win2K8 y Win7, notará una lista creciente de tareas programadas de propósito especial que realizan el mantenimiento del sistema y muchos servicios del sistema.

Para cualquier tarea programada, normalmente recomendaría un Servicio de Windows, por las siguientes razones:

  • Un servicio de Windows se ejecutará incluso si un usuario no ha iniciado sesión en la PC (se ejecutará incluso si el servidor está sentado en el indicador de inicio de sesión) (***Nota: esto puede depender de la versión de Windows que esté ejecutando).
  • Un servicio puede ejecutarse como cuentas de alta autoridad, como Servicio de red o Sistema local, o un Usuario; tienen más capacidad de configuración en ese sentido.
  • Un servicio también viene integrado con opciones para iniciar, detener, reiniciar y pausar mientras se ejecuta (a veces)
  • También puede configurar condiciones de falla para los servicios, por ejemplo, si falla, haga que se reinicie automáticamente

En cuanto a otros ejemplos de aplicaciones que pueden ser servicios de Windows, muchas veces son útiles para aplicaciones como la comunicación remota: puede hacer que un servicio ejecute un servidor remoto al que se conectan los clientes. Obviamente, muy útil para tareas de procesamiento de datos que también desea ejecutar en segundo plano, o procesos en los que desea enviar un correo electrónico en ciertas condiciones, etc.

En general, siempre he encontrado que las tareas programadas son mucho más frágiles y poco confiables. Y a menos que haga que se registren correctamente, a menudo es más difícil de depurar.

En referencia al error con el temporizador, si lee el informe de error en el sitio de MS, puede ver que se produce cuando llama a “Detener” dentro del evento Timer_Elapsed. La respuesta a esto es simple: no pare. En su lugar, envuelva todo en un cheque para un booleano “IsRunning” y solo ejecútelo si IsRunning es false. Incluso si no hubo un problema con el temporizador, debe hacer esto de todos modos porque el temporizador podría volver a activarse durante su ejecución si su ejecución toma más tiempo que el intervalo de su temporizador.

De todos modos, sigo pensando que usar tareas programadas es una solución débil y me da recuerdos de Windows 95.

Habiendo tenido que escribir, depurar, implementar y brindar soporte a ambos, prefiero las tareas programadas de lejos. No dudo que hay casos de uso en los que esta sería la elección incorrecta. Pero para cualquier tarea relativamente trivial, una aplicación de consola que se ejecuta como una tarea programada funciona muy bien.

En mi experiencia, las tareas programadas son extremadamente confiables. No recuerdo una sola falla y admito alrededor de media docena de tareas programadas diferentes que se ejecutan desde todos los días hasta cada 15 minutos. (No es que no haya habido fallas, pero todos fueron problemas de código o configuración. Se registraron y se enviaron notificaciones. El problema NUNCA ha sido con la infraestructura de Programación de tareas).

Las tareas del Programador de tareas se pueden ejecutar en cualquier contexto de usuario y no es necesario que nadie inicie sesión.

Mi mayor ventaja está en el despliegue. Para aplicaciones de consola, simplemente publique el EXE en la carpeta de destino correcta. Para los servicios de Windows, debe detener el servicio (usando net.exe), desinstalar el servicio (usando InstallUtil.exe), esperar (tengo la implementación suspendida durante 25 segundos), publicar el EXE y luego hacerlo todo a la inversa (instalar , comienzo).

Si volviera a desarrollar un servicio de Windows, lo escribiría como una aplicación de consola y luego encontraría una manera de envolverlo en un servicio para que la depuración sea un dolor de cabeza menor.

Te mostramos comentarios y valoraciones

No se te olvide dar difusión a esta división si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *