2009-08-01 23 views
5

Solo he creado aplicaciones de Windows normales (C# principalmente). ¿Qué diferencia a un servicio de Windows de una aplicación de Windows normal? ¿Qué los hace diferentes? ¿Qué puede hacer un servicio que una aplicación no puede? ¿Cuáles son las diferencias vistas desde el punto de vista de los desarrolladores? ¿Cómo se crea uno? ¿Es solo para crear una aplicación regular (quizás la aplicación de consola, ya que no hay una interfaz gráfica de usuario) y ejecutarla o instalarla de una manera especial, o es más lo que tiene que hacerse?¿Cuál es la diferencia entre un servicio de Windows y una aplicación normal?

Respuesta

9

Hay un par de cosas que me saltan inmediatamente.

  • Se ejecutan en una consola totalmente diferente a partir de Vista
  • Como resultado de ejecutar en una consola diferente, los servicios no pueden interactuar con el escritorio. Entonces, esencialmente, no hay soporte directo para UI. Por lo general, debe codificar una aplicación de interfaz de usuario hermana que se ejecuta como un programa normal y utiliza algún mecanismo (por ejemplo, canalizaciones con nombre) para comunicarse con el servicio.
  • Normalmente, solo se puede ejecutar una instancia de su servicio en cualquier momento.
  • Los procesos son por usuario, los servicios son por estación de trabajo y, por lo tanto, a menudo proporcionan servicios para usuarios múltiples.
0

La diferencia principal es que un servicio de Windows es algo que desea ejecutar como un servicio en segundo plano y no requiere una interfaz de usuario. Un ejemplo es un servicio que indexa archivos en su disco para buscar. .

Otra ventaja es que puede tener los servicios se inician automáticamente cuando el usuario inicia sesión en

También existen métodos que pueden anular que se llama cuando se inicia el servicio/parado (es decir, desde el Panel de control. | Herramientas administrativas | Servicios).

En Visual Studio hay un tipo de proyecto especial que puede usar para crearlo. Consulte el siguiente sitio para ver un ejemplo: http://www.dotheweb.net/articles/dotnet/services.aspx

+0

Prefiero decir que puede ejecutar servicios sin sesiones interactivas en la máquina. Puede iniciar lotes o programas cuando el usuario inicia sesión de varias maneras. Usar un servicio no es realmente un beneficio allí. – Joey

6

This MSDN page lleva a más documentación sobre cómo crearlos de lo que podría sacudir un palo. This page es quizás una mejor introducción a ellos en general.

La diferencia clave entre un proceso que se ejecuta como una aplicación y como un servicio es que el servicio puede operar completamente fuera de la asociación normal con un usuario y sesión. Por lo tanto, los servicios pueden ejecutarse de manera tal que se inicien antes de que cualquier usuario inicie sesión y pueda continuar ejecutándose después de que los usuarios cierren la sesión. Los servicios se utilizan para implementar una gran parte de la funcionalidad real del sistema operativo.

Los servicios tampoco están relacionados con la ejecución como un mapeo 1: 1 con un proceso. Muchos servicios pueden existir dentro de un proceso, normalmente mediante el uso de svchost (eche un vistazo a estos con el explorador de procesos para una indicación de cómo esto funciona a menudo). Esto reduce el esfuerzo al inicio ya que no se requieren múltiples procesos para servicios relativamente livianos.

Implementar un servicio en C# es bastante simple, este page indica cómo en términos muy fáciles de seguir.

Tenga en cuenta que en realidad un servicio en Windows es poco más que el andamio en el registro bajo HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services que define esas 'rutas de imagen' (en la mayoría de los casos simplemente ejecutables y los parámetros a usar) que son servicios considerados junto con el usuario que luego ejecuta, de qué otros servicios dependen y si comienzan desde el inicio o la puesta en marcha o según sea necesario.

2

Si está familiarizado con Unix, un servicio de Windows es como un daemon de Unix. No está asociado a ningún usuario en particular y siempre se ejecuta en segundo plano.

Cuestiones relacionadas