柔城

SOSOFT articles

C#开发Windows服务的基础代码

做项目需要对Windows服务进行操作,从网上找了一些资料,总结如下:

(以下程序在程序中测试通过)

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Text;
  7 using System.Windows.Forms;
  8 using System.Collections;
  9 using System.Configuration.Install;
 10 using System.Collections.Specialized;
 11 using System.ServiceProcess;
 12 
 13 namespace IAU.ServerInstall.BLL
 14 {
 15     public class ServiceControl
 16     {
 17         /// <summary>
 18         /// 注册服务(注册完就启动,已经存在的服务直接启动。)
 19         /// </summary>
 20         /// <param name="strServiceName">服务名称</param>
 21         /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>
 22         public void Register(string strServiceName, string strServiceInstallPath)
 23         {
 24             IDictionary mySavedState = new Hashtable();
 25 
 26             try
 27             {
 28                 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(strServiceName);
 29 
 30                 //服务已经存在则卸载
 31                 if (ServiceIsExisted(strServiceName))
 32                 {
 33                     //StopService(strServiceName);
 34                     UnInstallService(strServiceName, strServiceInstallPath);
 35                 }
 36                 service.Refresh();
 37                 //注册服务 http://www.cnblogs.com/sosoft/
 38                 AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
 39 
 40                 mySavedState.Clear();
 41                 myAssemblyInstaller.Path = strServiceInstallPath;
 42                 myAssemblyInstaller.UseNewContext = true;
 43                 myAssemblyInstaller.Install(mySavedState);
 44                 myAssemblyInstaller.Commit(mySavedState);
 45                 myAssemblyInstaller.Dispose();
 46 
 47                 service.Start();
 48             }
 49             catch (Exception ex)
 50             {
 51                 throw new Exception("注册服务时出错:" + ex.Message);
 52             }
 53         }
 54 
 55         /// <summary>
 56         /// 卸载服务
 57         /// </summary>
 58         /// <param name="strServiceName">服务名称</param>
 59         /// <param name="strServiceInstallPath">服务安装程序完整路径(.exe程序完整路径)</param>
 60         public void UnInstallService(string strServiceName, string strServiceInstallPath)
 61         {
 62             try
 63             {
 64                 if (ServiceIsExisted(strServiceName))
 65                 {
 66                     //UnInstall Service
 67                     AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller();
 68                     myAssemblyInstaller.UseNewContext = true;
 69                     myAssemblyInstaller.Path = strServiceInstallPath;
 70                     myAssemblyInstaller.Uninstall(null);
 71                     myAssemblyInstaller.Dispose();
 72                 }
 73             }
 74             catch (Exception ex)
 75             {
 76                 throw new Exception("卸载服务时出错:" + ex.Message);
 77             }
 78         }
 79 
 80 
 81         /// <summary>
 82         /// 判断服务是否存在
 83         /// </summary>
 84         /// <param name="serviceName">服务名</param>
 85         /// <returns></returns>
 86         public bool ServiceIsExisted(string serviceName)
 87         {
 88             ServiceController[] services = ServiceController.GetServices();
 89             foreach (ServiceController s in services)
 90             {
 91                 if (s.ServiceName == serviceName)
 92                 {
 93                     return true;
 94                 }
 95             }
 96             return false;
 97         }
 98 
 99         /// <summary>
100         /// 启动服务(启动存在的服务,30秒后启动失败报错)
101         /// </summary>
102         /// <param name="serviceName">服务名</param>
103         public void StartService(string serviceName)
104         {
105             if (ServiceIsExisted(serviceName))
106             {
107                 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
108                 if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending)
109                 {
110                     service.Start();
111                     for (int i = 0; i < 30; i++)
112                     {
113                         service.Refresh();
114                         System.Threading.Thread.Sleep(1000);
115                         if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
116                         {
117                             break;
118                         }
119                         if (i == 29)
120                         {
121                             throw new Exception("服务" + serviceName + "启动失败!");
122                         }
123                     }
124                 }
125             }
126         }
127 
128         /// <summary>
129         /// 停止服务(停止存在的服务,30秒后停止失败报错)
130         /// </summary>
131         /// <param name="serviceName"></param>
132         public void StopService(string serviceName)
133         {
134             if (ServiceIsExisted(serviceName))
135             {
136                 System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName);
137                 if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running)
138                 {
139                     service.Stop();
140                     for (int i = 0; i < 30; i++)
141                     {
142                         service.Refresh();
143                         System.Threading.Thread.Sleep(1000);
144                         if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
145                         {
146                             break;
147                         }
148                         if (i == 29)
149                         {
150                             throw new Exception("服务" + serviceName + "停止失败!");
151                         }
152                     }
153                 }
154             }
155         }
156     }
157 }

博客园 柔城  以上代码概述:

C#对Windows服务操作(注册安装服务,卸载服务,启动停止服务,判断服务存在)

 

posted on 2014-02-16 00:23  柔城  阅读(611)  评论(0编辑  收藏  举报

导航