servicios servicio para iniciar detener configurar como automaticamente .net installer service

.net - para - iniciar xampp como servicio de windows



¿Cómo iniciar automáticamente su servicio después de la instalación? (6)

Agregue la siguiente clase a su proyecto.

using System.ServiceProcess; class ServInstaller : ServiceInstaller { protected override void OnCommitted(System.Collections.IDictionary savedState) { ServiceController sc = new ServiceController("YourServiceNameGoesHere"); sc.Start(); } }

El proyecto de instalación recogerá la clase y ejecutará su servicio una vez que el instalador finalice.

¿Cómo se inicia automáticamente un servicio después de ejecutar una instalación desde un Proyecto de instalación de Visual Studio?

Acabo de entender esto y pensé que compartiría la respuesta para el bien general. Respuesta a seguir Estoy abierto a otras y mejores formas de hacerlo.


Basado en los fragmentos de arriba, mi archivo ProjectInstaller.cs acabó pareciéndose a esto para un servicio llamado FSWServiceMgr.exe. El servicio se inició después de la instalación. Como nota al margen, recuerde hacer clic en la pestaña Propiedades (no hacer clic con el botón derecho) cuando se selecciona el proyecto de instalación en el Explorador de soluciones para configurar la empresa y demás.

using System.ComponentModel; using System.Configuration.Install; using System.ServiceProcess; namespace FSWManager { [RunInstaller(true)] public partial class ProjectInstaller : Installer { public ProjectInstaller() { InitializeComponent(); this.FSWServiceMgr.AfterInstall += FSWServiceMgr_AfterInstall; } static void FSWServiceMgr_AfterInstall(object sender, InstallEventArgs e) { new ServiceController("FSWServiceMgr").Start(); } } }


En lugar de crear su propia clase, seleccione el instalador del servicio en el instalador del proyecto y agregue un controlador de eventos al evento Comitted:

private void serviceInstallerService1_Committed(object sender, InstallEventArgs e) { var serviceInstaller = sender as ServiceInstaller; // Start the service after it is installed. if (serviceInstaller != null && serviceInstaller.StartType == ServiceStartMode.Automatic) { var serviceController = new ServiceController(serviceInstaller.ServiceName); serviceController.Start(); } }

Comenzará su servicio solo si el tipo de inicio está configurado en automático.


Este enfoque utiliza la clase Installer y la menor cantidad de código.

using System.ComponentModel; using System.Configuration.Install; using System.ServiceProcess; namespace MyProject { [RunInstaller(true)] public partial class ProjectInstaller : Installer { public ProjectInstaller() { InitializeComponent(); serviceInstaller1.AfterInstall += (sender, args) => new ServiceController(serviceInstaller1.ServiceName).Start(); } } }

Defina serviceInstaller1 (escriba ServiceInstaller) en el diseñador de la clase Installer y también establezca su propiedad ServiceName en el diseñador.


Pequeña adición a la respuesta aceptada:

También puede buscar el nombre del servicio de esta manera, evitando cualquier problema si el nombre del servicio se cambia en el futuro:

protected override void OnCommitted(System.Collections.IDictionary savedState) { new ServiceController(serviceInstaller1.ServiceName).Start(); }

(Cada Instalador tiene un ServiceProcessInstaller y un ServiceInstaller. Aquí el ServiceInstaller se llama serviceInstaller1).


gracias, corre bien ...

private System.ServiceProcess.ServiceInstaller serviceInstaller1; private void serviceInstaller1_AfterInstall(object sender, InstallEventArgs e) { ServiceController sc = new ServiceController("YourServiceName"); sc.Start(); }