2010-01-24 13 views

Respuesta

43

Un servicio de Windows siempre se ejecuta una vez que se inicia el equipo (siempre que esté configurado). Un EXE estándar solo se ejecuta cuando un usuario inicia sesión, y se detendrá si el usuario cierra la sesión.

Se podría utilizar un servicio de Windows para las cosas que siempre se necesitan para funcionar, incluso si nadie está conectado.

Se podría utilizar un archivo EXE estándar para los programas que un usuario se ejecutará mientras está conectado.

2

Un el servicio es (por lo general) es un exe estándar sin interfaz de usuario. Se puede ejecutar incluso cuando no hay ningún usuario conectado a la máquina, y sus derechos de acceso y visualización del sistema de archivos no depende de qué usuario esté conectado.

+1

No es 100% exacto. Un servicio debe cumplir con algunos requisitos adicionales además de ser un exe estándar sin UI. –

+0

sí algunos requisitos, y una API diferente a la que tiene acceso, pero sigue siendo un EXE estándar. –

+0

¿El servicio del Agente SQL Server no tiene la interfaz del semáforo? Eso es un servicio si no me equivoco? – LearningCSharp

31

Un servicio de Windows tiene una función especial ServiceMain y debe responder a Service Control Manager (SCM) manda correctamente para ser funcional como un servicio. Por otro lado, un ejecutable regular tiene una función main o WinMain y no necesita responder a ningún comando de control en particular.

+5

Técnicamente correcto, pero no creo que responda la pregunta muy bien. (Ver la respuesta de Eric J). – Ash

+0

Las respuestas de Greg y Eric funcionan, pero solo puedo marcar una como correcta :-( – LearningCSharp

+1

Definitivamente creo que esta es una respuesta mucho más correcta que la elegida. La otra responde mejor a la pregunta "¿Qué es un servicio de Windows?". –

12

Si usted está hablando de la implementación de una operación en segundo plano, aquí están los criterios que recomendaría a elegir un servicio o un .exe sin ventanas:

Elija un exe si:

  • es necesario que se ejecute sobre una base por usuario y sólo cuando un usuario se registra en
  • lo necesita para interactuar con el escritorio de Windows (iconos de notificación, etc.)
  • sino que precisa de todos los privilegios de la iniciada una sesión en usuario (no más, no menos)

Elija un servicio si:

  • Puede que tenga que ejecutar cuando no hay nadie conectado
  • En general, no necesita datos o privilegios por usuario
  • Es únicamente se comunica con el red
  • Necesita exponer nuevos objetos "asegurables". Objetos que tienen sus propias listas de control de acceso declarativo (DACL) que limitan el acceso a ciertas cuentas/grupos.
  • Necesita permisos especiales que pueden no estar disponibles para el usuario que ha iniciado sesión.

Los servicios pueden ser fácilmente agujeros de seguridad, así que prefiera .exe a los servicios. A veces necesitarás ambos. Un comprobador de virus necesita poder acceder a todos los archivos del sistema de archivos (que el usuario actual puede no ser capaz de hacer), pero también debe proporcionar información al usuario en forma de cuadros de diálogo/pop-ups de notificación y una herramienta icono de bandeja. Los servicios no pueden interactuar directamente con la GUI del usuario. Pueden usar los servicios estándar de Windows IPC (comunicación entre procesos) como tuberías y regiones de memoria compartida. Dichas herramientas suelen tener tanto un servicio como un .exe sin ventanas por usuario que se comunica con el servicio utilizando conductos de Windows o regiones de memoria compartida.

Obtenga "Programación de seguridad de Windows" por Keith Brown si desea profundizar en estos temas.

+0

Minor nit: la D en DACL significa discrecional. –

+0

"Se comunica únicamente con la red", esto es incorrecto, los servicios pueden hacer muchas otras cosas además del acceso a la red. – Ash

+1

No todos los servicios de Win32/64 se comunican únicamente con la red, pero todos los daemons que solo necesitan comunicarse con la red casi siempre se implementan mejor como servicios cuando se programan en Win32/64. Tuve la intención de que la lista describiera los escenarios donde los servicios tienen sentido, sin circunscribir cada caso de uso para los servicios de Windows. –

1

Desde la perspectiva del Binario EXE y desde la perspectiva de la Biblioteca C del Compilador, un servicio de Windows se ve exactamente como un programa Unix estándar o un programa de consola de Windows. es decir, con main() punto de entrada. Lo que hace que un servicio sea diferente es cómo lo carga/invoca Microsoft Windows (desde el registro, generalmente al arrancar). Un servicio puede (y debe) indicarle a la aplicación SC.exe [Administrador de control de servicios] a través de llamadas API de Windows, que el servicio se inició, detuvo, suspendió, etc.

Cuestiones relacionadas