Tengo un servicio de Windows que instalo usando InstallUtil.exe. Aunque configuré el Método de inicio en Automático, el servicio no se inicia cuando se instala, tengo que abrir manualmente los servicios y hacer clic en Iniciar. ¿Hay alguna forma de iniciarlo a través de la línea de comandos o mediante el código del Servicio?
c#
windows-services
mickyjtwin
fuente
fuente
ServiceController
en una declaración de uso.ServiceInstaller
variable de su clase. Tal clase se implementaráSystem.Configuration.Install.Installer
. Consulte esta guía de msdn para obtener más información.serviceInstaller
es elServiceInstaller
objeto al que se hace referenciasender
en el controlador de eventos, que normalmente se instancia en elServiceInstaller()
constructor. Por lo tanto, puede agregarServiceInstaller serviceInstaller = (ServiceInstaller)sender;
antes de lausing
declaración.Después de refactorizar un poco, este es un ejemplo de un instalador de servicios de Windows completo con inicio automático:
fuente
¿Qué hay de seguir los comandos?
fuente
Opciones programáticas para controlar los servicios:
StartService
método. Esto es bueno para los casos en los que necesita poder realizar otro procesamiento (por ejemplo, para seleccionar qué servicio).Start-Service
medianteRunspaceInvoke
o creando el suyo propioRunspace
y utilizando suCreatePipeline
método para ejecutar. Esto es bueno para los casos en los que necesita poder realizar otro procesamiento (por ejemplo, para seleccionar qué servicio) con un modelo de codificación mucho más fácil que WMI, pero depende de la instalación de PSH.ServiceController
fuente
Puede utilizar la siguiente línea de comando para iniciar el servicio:
fuente
Utilice ServiceController para iniciar su servicio desde el código.
Actualización: Y la forma más correcta de iniciar el servicio desde la línea de comandos es usar el comando "sc" ( controlador de servicio ) en lugar de "net".
fuente
A pesar de seguir exactamente la respuesta aceptada, todavía no pude hacer que el servicio se iniciara; en cambio, recibí un mensaje de falla durante la instalación que indicaba que el servicio que se acababa de instalar no se podía iniciar, ya que no existía, a pesar de usar
this.serviceInstaller.ServiceName
más bien que un literal ...Finalmente encontré una solución alternativa que hace uso de la línea de comando:
fuente
El inicio automático significa que el servicio se inicia automáticamente cuando se inicia Windows. Como han mencionado otros, para iniciarlo desde la consola debe usar ServiceController.
fuente
Puede utilizar el
GetServices
método de la clase ServiceController para obtener una matriz de todos los servicios. Luego, encuentre su servicio marcando laServiceName
propiedad de cada servicio. Cuando haya encontrado su servicio, llame alStart
método para iniciarlo.También debe verificar la
Status
propiedad para ver en qué estado ya se encuentra antes de llamar al inicio (puede estar en ejecución, en pausa, detenido, etc.).fuente
Corrompiste a tu diseñador. Vuelva a agregar su componente de instalación. Debe tener un serviceInstaller y un serviceProcessInstaller. El serviceInstaller con la propiedad Método de inicio establecido en Automático se iniciará cuando se instale y después de cada reinicio.
fuente
Solo una nota: es posible que haya configurado su servicio de manera diferente utilizando la interfaz de formularios para agregar un instalador de servicios y un instalador de proyectos. En ese caso, reemplace donde dice serviceInstaller.ServiceName con "nombre del diseñador" .ServiceName.
Tampoco necesita los miembros privados en este caso.
Gracias por la ayuda.
fuente