//一、安裝服務:private void InstallService(IDictionary stateSaver, string filepath) { try { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName"); if(!ServiceIsExisted("ServiceName")) { //Install Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path =filepath; myAssemblyInstaller.Install(stateSaver); myAssemblyInstaller.Commit(stateSaver); myAssemblyInstaller.Dispose(); //--Start Service service.Start(); } else { if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); } } } catch (Exception ex) { throw new Exception("installServiceError\n" + ex.Message); } }//二、卸載windows服務: private void UnInstallService(string filepath) { try { if (ServiceIsExisted("ServiceName")) { //UnInstall Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("unInstallServiceError\n" + ex.Message); } }//三、判斷window服務是否存在: private bool ServiceIsExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; }//四、啟動服務:private void StartService(string serviceName) { if (ServiceIsExisted(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) { break; } if (i == 59) { throw new Exception(startServiceError.Replace("$s$", serviceName)); } } } } }//五、停止服務: private void StopService(string serviceName) { if (ServiceIsExisted(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) { break; } if (i == 59) { throw new Exception(stopServiceError.Replace("$s$", serviceName)); } } } } } // 停止指定的服務public string StartService(string serviceName){string strRst = null;ManagementObject mo = this.managementClass.CreateInstance();mo.Path = new ManagementPath(this.strPath+".Name=\""+serviceName+"\"");try{if((string)mo["State"]=="Stopped")//!(bool)mo["AcceptStop"]mo.InvokeMethod("StartService",null);}catch(ManagementException e){strRst =e.Message; }return strRst;}// 暫停指定的服務public string PauseService(string serviceName){string strRst = null;ManagementObject mo = this.managementClass.CreateInstance();mo.Path = new ManagementPath(this.strPath+".Name=\""+serviceName+"\"");try{//判斷是否可以暫停if((bool)mo["acceptPause"]&&(string)mo["State"]=="Running")mo.InvokeMethod("PauseService",null);}catch(ManagementException e){strRst =e.Message; }return strRst;}// 恢複指定的服務public string ResumeService(string serviceName){string strRst = null;ManagementObject mo = this.managementClass.CreateInstance();mo.Path = new ManagementPath(this.strPath+".Name=\""+serviceName+"\"");try{//判斷是否可以恢複if((bool)mo["acceptPause"]&&(string)mo["State"]=="Paused")mo.InvokeMethod("ResumeService",null);}catch(ManagementException e){strRst =e.Message; }return strRst;}// 停止指定的服務public string StopService(string serviceName){string strRst = null;ManagementObject mo = this.managementClass.CreateInstance();mo.Path = new ManagementPath(this.strPath+".Name=\""+serviceName+"\"");try{//判斷是否可以停止if((bool)mo["AcceptStop"])//(string)mo["State"]=="Running"mo.InvokeMethod("StopService",null);}catch(ManagementException e){strRst =e.Message; }return strRst;}}}