C# 服务的安装、卸载、启动、停止操作

  1  using  System;
  2  using  System.Collections.Generic;
  3  using  System.Collections;
  4  using  System.Linq;
  5  using  System.Text;
  6 
  7  using  System.ServiceProcess;
  8  using  System.Configuration.Install;
  9 
 10  namespace  WindowsFormsApplication2
 11  {
 12       public   class  ServiceManage
 13      {
 14           public  ServiceManage()
 15          {
 16          }
 17 
 18           private   string  _serviceName;
 19 
 20           public   string  serviceName
 21          {
 22               get  {  return  _serviceName; }
 23               set  { _serviceName  =  value; }
 24          }
 25 
 26           private   int  _overflag  =   - 1 ;
 27 
 28           public   int  overflag
 29          {
 30               get  {  return  _overflag; }
 31               set  { _overflag  =  value; }
 32          }
 33 
 34 
 35           ///   <summary>          
 36           ///  枚举系统服务         
 37           ///   </summary>         
 38           private   void  EnumServices()
 39          {
 40              ServiceController[] svcs  =  ServiceController.GetServices();
 41               foreach  (ServiceController svc  in  svcs)
 42              {
 43              }
 44          }
 45 
 46 
 47           public   void  InstallService()
 48          {
 49              _overflag  =   0 ;
 50              IDictionary stateSaver  =   new  Hashtable();
 51               string  _AssemblyFileName  =   string .Concat(AppDomain.CurrentDomain.BaseDirectory,  " ken.WinService.exe " );
 52 
 53               try
 54              {
 55                  System.ServiceProcess.ServiceController service  =   new  System.ServiceProcess.ServiceController(_serviceName);
 56 
 57                   if  ( ! ServiceIsExisted())
 58                  {
 59                       // Install Service
 60                      AssemblyInstaller myAssemblyInstaller  =   new  AssemblyInstaller();
 61 
 62                      myAssemblyInstaller.UseNewContext  =   true ;
 63 
 64                      myAssemblyInstaller.Path  =  _AssemblyFileName;
 65                      
 66                      myAssemblyInstaller.Install(stateSaver);
 67 
 68                      myAssemblyInstaller.Commit(stateSaver);
 69 
 70                      myAssemblyInstaller.Dispose();
 71 
 72                       // --Start Service
 73 
 74                      service.Start();
 75 
 76                  }
 77                   else
 78                  {
 79                       if  (service.Status  !=  System.ServiceProcess.ServiceControllerStatus.Running  &&  service.Status  !=  System.ServiceProcess.ServiceControllerStatus.StartPending)
 80                      {
 81                          service.Start();
 82                      }
 83                  }
 84              }
 85               catch  (Exception ex)
 86              {
 87                   throw   new  Exception( " installServiceError\n "   +  ex.Message);
 88              }
 89               finally
 90              {
 91                  _overflag  =   1 ;
 92              }
 93          }
 94 
 95           public   void  UnInstallService()
 96          {
 97              _overflag  =   0 ;
 98               string  _AssemblyFileName  =   string .Concat(AppDomain.CurrentDomain.BaseDirectory,  " ken.WinService.exe " );
 99 
100               try
101              {
102                   if  (ServiceIsExisted())
103                  {
104                       // UnInstall Service
105                      AssemblyInstaller myAssemblyInstaller  =   new  AssemblyInstaller();
106 
107                      myAssemblyInstaller.UseNewContext  =   true ;
108 
109                      myAssemblyInstaller.Path  =  _AssemblyFileName;
110 
111                      myAssemblyInstaller.Uninstall( null );
112 
113                      myAssemblyInstaller.Dispose();
114                  }
115              }
116               catch  (Exception ex)
117              {
118                   throw   new  Exception( " unInstallServiceError\n "   +  ex.Message);
119              }
120               finally
121              {
122                  _overflag  =   1 ;
123              }
124          }
125 
126           public   void  StartService()
127          {
128              _overflag  =   0 ;
129               try
130              {
131                   if  (ServiceIsExisted())
132                  {
133                      System.ServiceProcess.ServiceController service  =   new  System.ServiceProcess.ServiceController(_serviceName);
134 
135                       if  (service.Status  !=  System.ServiceProcess.ServiceControllerStatus.Running  &&  service.Status  !=  System.ServiceProcess.ServiceControllerStatus.StartPending)
136                      {
137                          service.Start();
138 
139                           for  ( int  i  =   0 ; i  <   60 ; i ++ )
140                          {
141                              service.Refresh();
142                              System.Threading.Thread.Sleep( 1000 );
143 
144                               if  (service.Status  ==  System.ServiceProcess.ServiceControllerStatus.Running)
145                              {
146                                   break ;
147                              }
148 
149                               if  (i  ==   59 )
150                              {
151                                   throw   new  Exception(_serviceName  +   "  启动失败 " );
152                              }
153                          }
154                      }
155                  }
156              }
157               catch
158              { }
159               finally
160              {
161                  _overflag  =   1 ;
162              }
163          }
164 
165           public   void  ReStartService()
166          {
167              StopService();
168              StartService();
169          }
170 
171           public   void  StopService()
172          {
173              _overflag  =   0 ;
174               try
175              {
176                   if  (ServiceIsExisted())
177                  {
178                      System.ServiceProcess.ServiceController service  =   new  System.ServiceProcess.ServiceController(_serviceName);
179                       if  (service.Status  ==  System.ServiceProcess.ServiceControllerStatus.Running  &&  service.CanStop)
180                      {
181                          service.Stop();
182                           for  ( int  i  =   0 ; i  <   60 ; i ++ )
183                          {
184                              service.Refresh();
185                              System.Threading.Thread.Sleep( 1000 );
186 
187                               if  (service.Status  ==  System.ServiceProcess.ServiceControllerStatus.Stopped)
188                              {
189                                   break ;
190                              }
191 
192                               if  (i  ==   59 )
193                              {
194                                   throw   new  Exception(_serviceName  +   "  停止失败 " );
195                              }
196                          }
197                      }
198                  }
199              }
200               catch
201              { }
202               finally
203              {
204                  _overflag  =   1 ;
205              }
206          }
207 
208           public   bool  ServiceIsExisted()
209          {
210              ServiceController[] services  =  ServiceController.GetServices();
211 
212               foreach  (ServiceController s  in  services)
213              {
214                   if  (s.ServiceName  ==  _serviceName)
215                  {
216                       return   true ;
217                  }
218              }
219 
220               return   false ;
221          }
222 
223           public  ServiceControllerStatus getServiceState()
224          {
225              System.ServiceProcess.ServiceController service  =   new  System.ServiceProcess.ServiceController(_serviceName);
226 
227               return  service.Status;
228          }
229      }
230  }
 
 
调用:
            ServiceManage __serviceManage = new ServiceManage();
            __serviceManage.serviceName = “servicename”;

            __serviceManage.overflag = -1;
            System.Threading.Thread _t = new System.Threading.Thread(new System.Threading.ThreadStart(__serviceManage.InstallService));
            _t.Start();

 

            while (__serviceManage.overflag < 1)
            {
                //do something;
            }

转载于:https://www.cnblogs.com/kenchan/archive/2011/07/16/2108304.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值