日期:2014-06-10 浏览次数:20507 次
在平时的工作中经常会遇到检测或设置系统服务的情况,一般来说我们主要会遇到以下几种操作使用场景:
1、获取系统所有服务
2、检测某个服务状态是否启动
3、设置某个服务状态:启动、停止、暂停、恢复
4、获取某个服务的状态
所以比较方便的就是自己封装一个类,可以随心所欲的调用,不用每次都去编写同样的代码。现在就自己遇到的情况,将操作系统服务的类实现:
系统服务类:systServiceMng
其实其核心是通过引用系统中的对应版本的System.ServiceProcess.dll(需要与你引用的项目框架版本一致),通过其中的ServiceController来映射到系统服务实例
提供了一些公用方法和属性可以设置和获取服务状态。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.ServiceProcess; ///made by george ///date:2014-05-30 ///QQ:709617880 namespace systemServiceMng { //设置操作枚举类型 public enum opertType{ start,stop,pause,reStart }; public class systServiceMng { /// <summary> /// 获取系统所有服务对象 /// </summary> /// <returns></returns> public ArrayList getAllsystemServices() { ArrayList arryServices = new ArrayList(); ServiceController[] services = ServiceController.GetServices(); foreach(ServiceController a in services){ arryServices.Add(a); } return arryServices; } /// <summary> /// 获取所有服务名,返回list /// </summary> /// <returns></returns> public List<String> getAllServiceNames() { List<String> listNames = new List<String>(); ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController a in services) { listNames.Add(a.DisplayName); } return listNames; } /// <summary> /// 设置指定服务 /// </summary> /// <param name="serviceName">服务显示名</param> /// <param name="oper">操作类型</param> /// <returns>true 设置成功,false设置失败</returns> public Boolean setService(string serviceName,opertType oper) { Boolean isok = false; ServiceController[] allServices = System.ServiceProcess.ServiceController.GetServices(); foreach (ServiceController sc in allServices) { if (sc.DisplayName.Trim() == serviceName.Trim()) { if (oper.ToString() == "start") { sc.Start(); if (sc.Status.ToString() == "Running") isok = true; } if (oper.ToString() == "stop") { sc.Stop(); if (sc.Status.ToString() == "Stopped") isok = true; } if (oper.ToString() == "pause") { sc.Pause(); if (sc.Status.ToString() == "Pause") isok = true; } if (oper.ToString() == "reStart") { sc.Continue(); if (sc.Status.ToString() == "Running") isok = true; } } } return isok; } /// <summary> /// 检测服务状态 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public Boolean checkServiceIsRunning(string serviceName) { ServiceController[] allServices = System.ServiceProcess.ServiceController.GetServices(); Boolean runing = false; foreach (ServiceController sc in allServices) { if (sc.DisplayName.Trim() == serviceName.Trim()) { if (sc.Status.ToString() == "Running") { runing= true; } } } return runing; } /// <summary> /// 获取服务状态 /// </summary> /// <param name="serviceName">服务显示名</param> /// <returns></returns> public String getStatue(string serviceName) { ServiceController[] allServices = System.ServiceProcess.ServiceController.GetServices(); foreach (ServiceController sc in allServices) { if (sc.DisplayName.Trim() == serviceName.Trim()) { return sc.Status.ToString(); } } return ""; } } }
注意:每一个服务有一个CanXXX的属性如:CanStop,CanShouDown……,在设置服务启动、停止、暂停、恢复 前需要判断该属性是否可设置,否则会报错。
可以写一个简单的winForm来操作系统服务,也是一个小工具,直接可以设置系统服务。
【下期预告】: C#玩转计算机系列-操作IIS服务