visual studio services open msc crear control windows-services

windows-services - studio - windows services control panel



Lenguaje más fácil para crear un servicio de Windows (6)

¿Cuál es el lenguaje más fácil para construir servicios de Windows?

Lo más fácil en este caso sería definir la menor cantidad de código y el punto de entrada más bajo al idioma.


A riesgo de afirmar lo obvio, si tiene antecedentes C / C ++ / Java, creo que C # le ofrece el punto de entrada más bajo.

Suponiendo que está utilizando Visual Studio 2008, puede seguir estos pasos:

  1. Abra Visual Studio 2008 y seleccione la opción de menú Archivo | Nuevo | Proyecto.
  2. En el cuadro de diálogo Nuevo proyecto ...
    • Seleccione el nodo de Visual C # | Windows en los tipos de proyecto
    • Seleccione la plantilla de servicio de Windows
    • Ingrese un nombre y una ubicación para su proyecto
    • presiona OK
  3. En este punto, tiene todos los elementos básicos para su servicio de Windows. El archivo Program.cs contiene el método Main () para su servicio, y Service1.cs define el componente System.ServiceProcess.ServiceBase que es su nuevo servicio de Windows.
  4. En la cuadrícula de propiedades para su componente Service1, considere establecer las siguientes propiedades como mínimo:
    • (Nombre): dale a tu objeto un nombre intuitivo, por ej., ServiceExample
    • AutoLog: establezca en false para evitar que los eventos se escriban de manera predeterminada en el registro de eventos de la aplicación (Nota: no digo que no deba registrar eventos del servicio; prefiero escribir en mi propio registro de eventos en lugar del registro de la aplicación; abajo)
    • CanShutdown: se establece en true si desea controlar las paradas del sistema
    • ServiceName: define el nombre con el que el administrador de control de servicios (SCM) conocerá su servicio.
  5. En el código de ServiceExample, las funciones virtuales OnStart () y OnStop () son anuladas. Tendrás que completarlos con lo que sea que tu servicio necesite hacer, obviamente. Si cambió la propiedad CanShutdown a true , también querrá anular el método OnShutdown. He creado un ejemplo a continuación que ilustra el uso de estas funciones.
  6. En este punto, el servicio ServiceExample está esencialmente completo, pero aún necesita una forma de instalarlo. Para hacer esto, abra el componente ServiceExample en el diseñador. Haga clic con el botón derecho en cualquier parte del panel del diseñador y seleccione la opción del menú Agregar instalador. Esto agrega un componente ProjectInstaller a su proyecto, que contiene dos componentes adicionales: serviceProcessInstaller1 y serviceInstaller1.
  7. Seleccione el componente serviceProcessInstaller1 en el diseñador. En la cuadrícula de propiedades, considere establecer las siguientes propiedades:
    • (Nombre): dale a tu objeto un nombre intuitivo, por ejemplo, serviceProcessInstaller
    • Cuenta: seleccione la cuenta de servicio local como mínimo, pero es posible que deba usar la cuenta NetworkService o LocalSystem si su servicio requiere más privilegios.
  8. Seleccione el componente serviceInstaller1 en el diseñador. En la cuadrícula de propiedades, considere establecer las siguientes propiedades:
    • (Nombre): darle un nombre intuitivo al objeto, por ejemplo, serviceInstaller
    • Descripción: la descripción del servicio que se mostrará en el SCM para su servicio
    • DisplayName: el nombre descriptivo de su servicio que se mostrará en el SCM para su servicio
    • ServiceName: asegúrese de que este sea el mismo nombre que seleccionó para la propiedad ServiceName de su componente ServiceExample (consulte el Paso 4)
    • StartType: indique si desea que el servicio se inicie automáticamente o manualmente
  9. Recuerde que dije que prefiero escribir eventos en mi propio registro de eventos en lugar del registro de eventos de la aplicación. Para hacer esto, deberá reemplazar el EventLogInstaller predeterminado en su ProjectInstaller por uno personalizado. Haga que su código para su ProjectInstaller se vea así:

using System.Diagnostics; [RunInstaller(true)] public partial class ProjectInstaller : Installer { public ProjectInstaller() { InitializeComponent(); EventLogInstaller installer = FindInstaller(this.Installers); if (installer != null) { installer.Log = "ServiceExample"; // enter your event log name here } } private EventLogInstaller FindInstaller(InstallerCollection installers) { foreach (Installer installer in installers) { if (installer is EventLogInstaller) { return (EventLogInstaller)installer; } EventLogInstaller eventLogInstaller = FindInstaller(installer.Installers); if (eventLogInstaller != null) { return eventLogInstaller; } } return null; } }

En este punto, puede construir su proyecto para hacer que su servicio de Windows sea ejecutable. Para instalar su servicio, abra el símbolo del sistema de Visual Studio 2008 y vaya al directorio Debug o Release donde está su ejecutable. En el símbolo del sistema, escriba lo siguiente: InstallUtil ServiceExample.exe . Esto instalará su servicio en la máquina local. Para desinstalarlo, escriba lo siguiente en el símbolo del sistema: InstallUtil / u ServiceExample.exe

Siempre que su servicio no se esté ejecutando, puede realizar cambios en su servicio y volver a compilarlo, es decir, no tiene que desinstalar su servicio para realizar cambios en él. Sin embargo, no podrá sobrescribir el ejecutable con sus correcciones y mejoras, siempre que se esté ejecutando.

Para ver su servicio en acción, abra el archivo ServiceExample.cs y realice los siguientes cambios:

using System.Diagnostics; public partial class ServiceExample : ServiceBase { public ServiceExample() { // Uncomment this line to debug the service. //Debugger.Break(); InitializeComponent(); // Ties the EventLog member of the ServiceBase base class to the // ServiceExample event log created when the service was installed. EventLog.Log = "ServiceExample"; } protected override void OnStart(string[] args) { EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information); } protected override void OnStop() { EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information); } protected override void OnShutdown() { EventLog.WriteEntry("The service was shutdown successfully", EventLogEntryType.Information); } }

Una vez que ejecuta su servicio con estos cambios, puede consultar el registro de eventos de ServiceExample en el Visor de eventos y ver los mensajes allí registrados.

Espero que esto ayude.

EDITAR: Si prefiere utilizar el registro de eventos de la aplicación para el registro de eventos en lugar de uno personalizado, simplemente no realice cambios en el archivo ProjectInstaller.cs. Además, omita la línea que establece la propiedad de registro de EventLog en el constructor ServiceExample. Cuando ejecuta su servicio, sus mensajes de registro aparecerán en el registro de eventos de la aplicación.


Con Visual C #, encontrará la mayoría de los ejemplos de código en la red. Combinado con Visual Studio, es un paseo por el parque para poner en marcha un servicio básico de Windows. Visual Studio también facilita la creación de un paquete de instalación de MSI.

Esa sería mi elección


Estoy de acuerdo con todos los que respondieron en otro lugar, pero yo diría que no se concentren demasiado en el lenguaje real, siempre y cuando trabaje en el marco .NET, y hay un proyecto inicial para usted, es bueno que lo haga. ir. He hecho varios "servicios de Windows" en el pasado, y los desarrollé tanto en VB.NET como en C #, con un código mínimo.

Lo que recomendaría que haga el OP es aprender a construir el paquete de instalador para él. Instalar el servicio es tan fácil como ejecutar "installutil.exe {drive} / path / to / file.exe", pero cuando hay que hacer algo más grande que desplegar un servicio de Windows "hello world", es bueno saber y entender cómo implementar el servicio de una manera significativa.

No para comenzar una guerra de llama, pero he "estandarizado" el uso de WiX para todos mis paquetes de implementación, aparte de hacer cosas de tipo interoperabilidad COM de la vieja escuela, ya que eso es una tarea ardua para lograr una instalación correcta. Estoy ansioso por que el equipo de WiX desarrolle la pieza de arranque que le permite poner los requisitos previos y el msi principal en un archivo EXE que se puede descargar. Lo tienen programado para 3.5, así que esperaré pacientemente y usaré los ejecutables autoextraíbles de WinZip por ahora.


Para mí, y solo lo he intentado de varias maneras, Visual Studio y C # fueron los más fáciles.

Visual Studio hizo toda la configuración necesaria de la instalación de servicios para el framework y descubrí que C # es muy fácil de aprender, migrando de VB6, VB.NET y C.


Un proyecto de servicio de Windows en C # le brindará un servicio completamente desplegable desde la plantilla de Visual Studio con solo hacer clic en un botón. Solo necesitas agregar tu código de carga.


Utilice el proyecto de tipo de servicio de Visual Studio, use C # o VB.NET.

Yo personalmente prefiero C #, pero en general es fácil entender el ciclo de vida y codificar la lógica en la etapa deseada.

Construir un instalador también es muy fácil.