Code snippet about some Windows service operation methods.
Install Service:
public static void InstallService(string filepath, string serviceName, string[] options) { try { if (!IsServiceExisted(serviceName)) { IDictionary mySavedState = new Hashtable(); AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.CommandLine = options; myAssemblyInstaller.Install(mySavedState); myAssemblyInstaller.Commit(mySavedState); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("Install Service Error " + ex.Message); } }
Uninstall Service:
public static void UnInstallService(string filepath, string serviceName, string[] options) { try { if (IsServiceExisted(serviceName)) { AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.CommandLine = options; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("UnInstall Service Error " + ex.Message); } }
Verify Serive Exist or Not:
public static bool IsServiceExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; }
Start a Service:
public static void StartService(string serviceName) { if (IsServiceExisted(serviceName)) { Console.WriteLine("Start Service: {0}", serviceName); System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { Console.WriteLine("Service start successfully."); break; } if (i == 59) { Console.WriteLine("Start Service Error " + serviceName); } } } }
Stop a Service:
public static void StopService(string serviceName) { if (IsServiceExisted(serviceName)) { Console.WriteLine("Stop Service: {0}", serviceName); System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { service.Stop(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) { Console.WriteLine("Service stopped successfully."); break; } if (i == 59) { Console.WriteLine("Stop Service Error " + serviceName); } } } } } }