2011-03-01 6 views
18

He creado un servicio de Windows que está configurado para iniciarse automáticamente. Este servicio se conecta al servicio de base de datos al inicio. El problema es que el servicio de base de datos parece comenzar después de mi servicio. ¿Existe una forma programática de definir esta dependencia para que mi servicio se inicie después de que se haya iniciado el servicio de la base de datos?crear dependencia entre los servicios de Windows inicio

Encontré este artículo http://www.boyce.us/windows/servertipcontent.asp?ID=7 que habla de agregar una entrada de registro para hacer eso. Me gustaría saber si hay una forma de C# para hacer esto?

Actualización:

Adición a la pregunta anterior. Aquí hay otro escenario. Los servicios se están instalando usando installshied, que no necesita un projectinsaller. Parece que installshield busca clases que se derivan de la clase ServiceBase e instala cada servicio. ¿Cómo agregar la dependencia en tal escenario?

Respuesta

26

Está buscando el ServiceInstaller.ServicesDependedOn Property para el componente ServiceInstaller de su proyecto.

Desde sección Comentarios del artículo (y en negrita la parte que le interesa):

Un servicio puede requerir otros servicios a estar en ejecución antes de que pueda comenzar. La información de esta propiedad es escrita en una clave en el registro. Cuando el usuario (o el sistema, en el caso de inicio automático) intenta ejecutar el servicio , el control de servicios (SMC) verifica que cada uno de los servicios de de la matriz ya ha sido iniciado .

Si algún servicio en la matriz no es ejecutándose entonces, el SCM intenta iniciarlos . Esto incluye servicios con Manual StartType.

Si no se inicia ningún servicio que este servicio depende, este servicio no se iniciará. Una excepción no es lanzada si el sistema no se inicia porque no hay una excepción que maneje en el nivel del sistema para detectar esto. Decida cómo manejar los inicios de servicio e implemente esto en su código . Normalmente, aparece un cuadro de diálogo al usuario al inicio si un servicio falla para comenzar.

Si el servicio no se inicia, se escribe una entrada en el registro de eventos de la aplicación .

Los servicios en los que depende este servicio no necesitan estar en el mismo ejecutable .

+0

+1 - Lo que iba a decir;) – Oded

+0

¿Puede usted pls. responder a la pregunta editada Gracias. – stackoverflowuser

+0

@stack: Lamento decir que ha pasado un tiempo desde que utilicé InstallShield (y cuando lo hice no era para Windows Services) así que me temo que no puedo ser de mucha ayuda. Intenté buscarlo en Google y se me ocurrió [esto] (http://community.installshield.com/showthread.php?t=162302&page=4), que _será_ útil. –

2

Además de respuesta Jay Riggs, aquí está y el ejemplo de lo que se debe añadir a la ServiceInstaller hacer depender su servicio en el registro de eventos

Me.ServiceInstaller1.ServiceName = "Service1"; 
Me.ServiceInstaller1.ServicesDependedOn = new string[] {"EventLog"}; 

¡Por supuesto, si usted tiene otra dependencia de servicio, cambiar el 'Registro de eventos' a otra cosa ..

Cuestiones relacionadas