清泛IT社区

标题: C# 通过代码安装、卸载、启动、停止服务 [打印本页]

作者: 清泛网    时间: 2015-10-28 10:36
标题: C# 通过代码安装、卸载、启动、停止服务
  1. #region Windows服务控制区

  2.         #region 安装服务
  3.         private void InstallService(string filepath, string serviceName)
  4.         {
  5.             try
  6.             {
  7.                 IDictionary _SavedState = new Hashtable();
  8.                 ServiceController service = new ServiceController(serviceName);
  9.                 string dispName = string.Empty;
  10.                 if (!ServiceIsExisted(serviceName, ref dispName))
  11.                 {
  12.                     // Install Service
  13.                     AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
  14.                     myAssemblyInstaller.UseNewContext = true;
  15.                     myAssemblyInstaller.Path = filepath;
  16.                     myAssemblyInstaller.Install(_SavedState);
  17.                     myAssemblyInstaller.Commit(_SavedState);
  18.                     myAssemblyInstaller.Dispose();
  19.                     // --Start Service
  20.                     // service.Start();
  21.                 }
  22.                 else
  23.                 {
  24.                     if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
  25.                     {
  26.                         service.Start();
  27.                     }
  28.                 }

  29.                 statusMsg.Text = "服务安装成功!";
  30.             }
  31.             catch (Exception ex)
  32.             {
  33.                 statusMsg.Text = "安装服务失败!" + ex.Message;
  34.             }
  35.         }
  36.         #endregion

  37.         #region 卸载windows服务
  38.         private void UnInstallService(string filepath, string serviceName)
  39.         {
  40.             try
  41.             {
  42.                 string dispName = string.Empty;
  43.                 if (ServiceIsExisted(serviceName, ref dispName))
  44.                 {
  45.                     // UnInstall Service  
  46.                     AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
  47.                     myAssemblyInstaller.UseNewContext = true;
  48.                     myAssemblyInstaller.Path = filepath;
  49.                     myAssemblyInstaller.Uninstall(null);
  50.                     myAssemblyInstaller.Dispose();
  51.                 }

  52.                 statusMsg.Text = "服务卸载成功!";
  53.             }
  54.             catch (Exception ex)
  55.             {
  56.                 statusMsg.Text = "卸载服务失败!" + ex.Message;
  57.             }
  58.         }
  59.         #endregion

  60.         #region 判断window服务是否存在
  61.         private bool ServiceIsExisted(string serviceName, ref string dispName)
  62.         {
  63.             ServiceController[] services = ServiceController.GetServices();
  64.             foreach (ServiceController s in services)
  65.             {
  66.                 if (s.ServiceName == serviceName)
  67.                 {
  68.                     dispName = s.DisplayName;
  69.                     return true;
  70.                 }
  71.             }
  72.             return false;
  73.         }
  74.         #endregion

  75.         #region 判断window服务是否启动
  76.         /// <summary>  
  77.         /// 判断某个Windows服务是否启动  
  78.         /// </summary>  
  79.         /// <returns></returns>  
  80.         public static bool IsServiceStart(string serviceName)
  81.         {
  82.             ServiceController psc = new ServiceController(serviceName);
  83.             bool bStartStatus = false;
  84.             try
  85.             {
  86.                 if (!psc.Status.Equals(ServiceControllerStatus.Stopped))
  87.                 {
  88.                     bStartStatus = true;
  89.                 }

  90.                 return bStartStatus;
  91.             }
  92.             catch (Exception ex)
  93.             {
  94.                 throw new Exception(ex.Message);
  95.             }
  96.         }
  97.         #endregion

  98.         #region 启动服务
  99.         private bool StartService(string serviceName)
  100.         {
  101.             bool flag = true;
  102.             string dispName = string.Empty;
  103.             if (ServiceIsExisted(serviceName, ref dispName))
  104.             {
  105.                 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
  106.                 if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
  107.                 {
  108.                     service.Start();
  109.                     for (int i = 0; i < 60; i++)
  110.                     {
  111.                         service.Refresh();
  112.                         System.Threading.Thread.Sleep(1000);
  113.                         if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
  114.                         {
  115.                             break;
  116.                         }
  117.                         if (i == 59)
  118.                         {
  119.                             flag = false;
  120.                         }
  121.                     }
  122.                 }
  123.             }
  124.             return flag;
  125.         }
  126.         #endregion

  127.         #region 停止服务
  128.         private bool StopService(string serviceName)
  129.         {
  130.             bool flag = true;
  131.             string dispName = string.Empty;
  132.             if (ServiceIsExisted(serviceName, ref dispName))
  133.             {
  134.                 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
  135.                 if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
  136.                 {
  137.                     service.Stop();
  138.                     for (int i = 0; i < 60; i++)
  139.                     {
  140.                         service.Refresh();
  141.                         System.Threading.Thread.Sleep(1000);
  142.                         if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
  143.                         {
  144.                             break;
  145.                         }
  146.                         if (i == 59)
  147.                         {
  148.                             flag = false;
  149.                         }
  150.                     }
  151.                 }
  152.             }
  153.             return flag;
  154.         }
  155.         #endregion
  156. #endregion
复制代码

需要添加以下命名空间:
using System.ServiceProcess;
using System.Configuration.Install;







欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3