在平时的工作中经常会遇到检测或设置系统服务的情况,一般来说我们主要会遇到以下几种操作使用场景:
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服务
C# 玩转计算机系列(一)-操作系统服务,布布扣,bubuko.com