services - servicios basicos de windows
¿Qué pueden hacer los Servicios en Windows? (5)
¿Alguien tiene una buena guía sobre las capacidades de los servicios de Windows en XP? En particular, estoy tratando de averiguar qué sucede cuando un programa que se ejecuta como un servicio intenta abrir ventanas, pero no se le ha dado permiso para interactuar con el escritorio.
Básicamente, tengo un programa que es / era una aplicación GUI, que debería poder ejecutarse como un servicio para el procesamiento de fondo a largo plazo. Reescribir el programa para que no muestre los elementos de la GUI cuando se procesa en segundo plano es un esfuerzo importante, por lo que me gustaría ver si hay una forma de ignorar los elementos de la interfaz de usuario. Ahora está funcionando, siempre y cuando no se abran demasiadas ventanas. Estoy tratando de descubrir los límites con los que me podría encontrar. Idealmente, habría una página de MSDN que discutiría esto, pero no he tenido suerte para encontrar uno.
En general, los servicios deben estar diseñados para no tener una IU visible. El objetivo de un servicio es ejecutarlo en segundo plano, sin interfaz de usuario, sin supervisión. (Piensa en SQL Server, IIS, etc.)
En la mayoría de los escenarios, una aplicación separada controla el funcionamiento del servicio, si se necesita una GUI. (Continuando con las muestras que acabo de mencionar, SQL Server Management Studio, IIS Manager, etc.) Estas aplicaciones separadas configuran y manipulan el servicio (y de vez en cuando, si es necesario, recuperan dicho servicio).
Si su servicio requiere UI ocasional, y dicha interfaz de usuario no se puede aislar a una aplicación de control, entonces probablemente debería reconsiderar el hecho de que está usando un servicio para comenzar. ¿Quizás una aplicación de interfaz de usuario que reside en el área de notificación del sistema es el patrón correcto para usar? (Por ejemplo, Windows Live Communicator).
Por lo general, el servicio no tendrá permiso para escribir en la estación de ventana y en el escritorio, por lo que fallará; incluso las aplicaciones en ejecución que cargan user32.dll pueden fallar simplemente porque user32 tiene un código de inicialización que quiere hablar con la estación de ventana y no puede obtener acceso a ella a menos que el servicio se esté ejecutando como administrador.
Si está pensando en migrar eventualmente a un sistema operativo más nuevo como Vista o Server 2008, encontrará que no puede dar permiso a un servicio para interactuar con el escritorio. Por lo tanto, desde el punto de vista de la compatibilidad con versiones anteriores, debe diseñar su servicio para que no lo requiera.
Un servicio en Microsoft Windows es un programa que se ejecuta cada vez que la computadora ejecuta el sistema operativo. No requiere que un usuario inicie sesión. Los servicios son necesarios para realizar tareas independientes del usuario, como replicación de directorios, supervisión de procesos o servicios a otras máquinas en una red, como soporte para el protocolo HTTP de Internet.
Por lo general, se implementa como una aplicación de consola que se ejecuta en segundo plano y realiza tareas que no requieren la interacción del usuario.
Los servicios instalados se pueden configurar a través del applet Servicios, disponible desde Control Panel --> Administrative Tools
en Windows 2000 / XP.
Los servicios se pueden configurar para que se inicien automáticamente cuando se inicia el sistema operativo, por lo que no es necesario que inicie cada uno de ellos manualmente después de reiniciar el sistema.
Un servicio en Windows XP puede interactuar con el escritorio si su propiedad "Permitir que el servicio interactúe con el escritorio" (MMC -> propiedades del servicio -> pestaña Iniciar sesión) está marcada. También es posible hacerlo haciendo lo siguiente:
hWinstation = OpenWindowStation("winsta0", FALSE, MAXIMUM_ALLOWED);
SetProcessWindowStation(hWinstation);
hDesktop = OpenDesktop("default", 0, FALSE, MAXIMUM_ALLOWED);
SetThreadDesktop(hDesk);
Pero tenga en cuenta que la presentación de la interfaz de usuario de un proceso de servicio en Windows XP casi siempre dará lugar a un problema de seguridad (consulte Ataque de fragmentación ). Debería tratar de separar la parte UI de su aplicación del servicio.