windows-services - programador - tareas programadas windows 10
Servicio de Windows o tarea programada, ¿cuál preferimos? (10)
Si necesitamos escribir un programa que funcione periódicamente, ¿de qué manera preferimos? ¿Escribir un servicio de Windows o escribir una aplicación de consola que funcione como tarea programada?
"Depende", pero normalmente prefiero las tareas programadas, por simplicidad:
- No es necesario que agregue ningún código de servicio en su programa.
- Su programa puede ejecutarse desde la línea de comandos para solucionar problemas (tendría que usar los interruptores de la línea de comandos en su programa de servicio para lograr esto).
Si esto es más o menos uno apagado, y algo que instalará y controlará usted mismo, una tarea programada es probablemente una buena idea.
Para algo que debería tener la sensación de un producto terminado, y el cliente debería instalarse, me gustaría ir con un Servicio de Windows.
Y el horario también es un problema. El horario mínimo para una tarea programada es de un minuto. Cualquier cosa por debajo de eso, debe usar un servicio de Windows o crear un bucle en su trabajo.
¿Depende de a qué te refieres con periódicamente? ¿Cada segundo, cada minuto, cada hora, cada día?
Yo diría que cuanto más frecuente es ejecutar una tarea, más se prefiere un servicio de Windows.
Alternativamente, eche un vistazo a quartz.net si desea que algo se ejecute periódicamente. Es un marco preconstruido que le permite programar tareas y le ahorra escribir la parte del servicio usted mismo.
Comience con una aplicación de consola. Separe la lógica que se ubicaría dentro de su bucle de proceso de reposo de bucle, entonces realmente puede cambiar entre ellos fácilmente, incluso en el mismo EXE.
He hecho esto. Podríamos llamar:
ourservice.exe -console
y simplemente correría. O
ourservice.exe -install
y se instalará como un servicio :)
Iría a la tarea programada en el 99% de los casos. Si necesita ejecutar todo el tiempo, escuchar en los puertos, ver una carpeta (tal vez, se puede hacer cada 10 segundos sin problemas): luego hágalo en un servicio. Si todo lo que hace es despertarse, haga un procesamiento (o no) y luego vuelva a dormir: use el programador. Es más fácil, más limpio (administración de memoria, especialmente si está usando objetos COM, y REALMENTE si está usando MAPI), y las opciones (semanalmente, pero no los martes a las 5 p. M.) Con el programador MS son mejores de lo que puede escribir en el tiempo ..... que no es tiempo, ya que ya existe y es gratis
Ah, y es más fácil depurar una aplicación de consola (planificador) que un servicio ... :) O hacer que alguien "simplemente lo ejecute".
Creo que también dependería de si puede dejar la computadora conectada o no. Descubrí que una tarea programada de Windows no se puede ejecutar a menos que la persona que configuró la tarea haya iniciado sesión. Si la computadora no puede permanecer conectada, el programa debe ejecutarse como una tarea programada de servicio.
Creo que un servicio podría ser útil si desea usar WCF o .NET Remoting y que las aplicaciones cliente se comuniquen con algún servicio de host; de lo contrario, estoy de acuerdo en que una tarea programada es preferible a un servicio si el servicio más complicado no agrega nada nuevo.
Y @Tom, su declaración acerca de tener que permanecer conectado a una computadora para ejecutar una tarea programada es falsa. Acabo de probarme y confirmé que una tarea de programación de Windows aún se ejecutará aunque no haya iniciado sesión (a menos que, por supuesto, seleccione la opción de que la tarea solo se ejecute mientras está conectado).
Depende de qué tan regular lo necesitas para correr.
Si es algo que debe ejecutarse cada 60 segundos durante todo el día, me gustaría ir con un Servicio de Windows.
Si es algo que solo necesita ejecutarse una vez al día, me gustaría ir con la tarea programada
Cualquier cosa en el medio ... usa tu juicio :)
Evite un servicio a menos que deba usarlo.
Es un proceso, lo que significa que se ejecuta todo el tiempo . El uso gratuito de los recursos del sistema es una mala práctica.
Personalmente, me parece insultante que otras personas tengan su proceso de ejecución 24/7 en MI computadora cuando es completamente innecesario. Es mi rendimiento que están usando. Deshabilito todos los servicios de fondo no necesarios.
Le sugeriría que ejecute el proceso como una tarea programada si puede, y que escriba un servicio solo si lo necesita. Los servicios son un poco más difíciles de escribir (correctamente), y si está ejecutando su proceso en un horario de cualquier tipo, es mucho mejor utilizar el programador de Windows que intentar crear un programador propio (dentro del servicio).
- El programador de tareas de Windows es más eficiente que el programador hecho en casa.
- El programador de tareas de Windows ofrece una serie de opciones que casi con toda seguridad no intentará replicar, pero que pueden resultar útiles más adelante.
- Si creas un servicio, tendrías que volver a compilar el programa si deseas cambiar la lógica que determina en qué condiciones se ejecutará la tarea. Si usa el programador, simplemente cambia algunas opciones y termina con él.
Si está intentando decidir entre los dos, entonces obviamente usar el Programador de tareas es una opción viable. Y si usar el Programador de tareas es una opción viable, entonces construir un servicio es casi con seguridad la opción equivocada.
Si realmente es "periódicamente" entonces iría con la tarea programada. Estos pueden configurarse para ejecutarse en cualquier frecuencia deseada.
Los servicios son (según mi experiencia) más para programas que tienen que responder a eventos esencialmente aleatorios, como los archivos que llegan a través de FTP, o que tienen que monitorear el estado del sistema de archivos o la base de datos.