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 }
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.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;
}