by Valeriano Tortola
2. febrero 2008 03:05
Imagina que tu servicio necesita de otro servicio para cumplir su función, supongamos que el servicio 'a' necesita del servicio 'b'. Si yo reinicio 'b' ... 'a' es posible que pierda la conexión ... aparezcan errores ... e incluso pudiese darse el caso de quedar funcionando pero inconsistente, otro problema es que puede ser que al arrancar la máquina 'a' arranque más rápido e intente conectar a 'b' de forma infructuosa ... con las consecuencias que ello acarreé (que no deberían ser muchas si has pensado en "cuando las cosas no salen como deberían" cuando lo desarrollaste).
Para solucionar este problema de forma elegante están las dependencias de servicio.
Si al crear 'a' decimos que depende de 'b' logramos este comportamiento:
- si se reinicia 'b' se reinicia 'a'.
- si se detiene 'b' se detiene 'a'.
- pero si se inicia 'b' ... y 'a' esta parado NO se inicia 'a' (ojo con esto :P ).
- cuando arranque la máquina, iniciará 'b' y después 'a'.
Es una pijada bastante sencillo de hacer y es muy útil.
Voy a agregar el servicio Message Queuing (MSMQ) como dependencia del servicio de instalable de prueba que cree el otro día, imaginando que no puede trabajar sin MSMQ.
Primero necesitamos saber el Nombre del servicio del que queremos depender, que aparece en primer lugar en la ventana de propiedades:
Después añadimos ese nombre (ó nombres si son varios) a la propiedad ServicesDependedOn de nuestro ServiceInstaller:
Y listo, al instalar nuestro servicio veremos que aparece MSMQ como dependencia:
Vemos, que MSMQ tiene también sus propias dependencias y el comportamiento antes citado se reproducirá en cadena.
Cosa curiosa... ¿Como añadir una dependencia a un servicio que ya esta instalado? Puuuess... lamentablemente hay que añadirla directamente sobre el registro de Windows (y digo lamentablemente porque no me gusta tocar el registro... y menos para esto :P ). La clave a modificar esta en:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service name>
Ale espero que sea útil :D