服务

    技术2022-05-19  30

    //一、安装服务:   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;   }   }   }  

    最新回复(0)