首页 > 学院 > 开发设计 > 正文

C# 玩转计算机系列(一)-操作系统服务

2019-11-17 03:07:39
字体:
来源:转载
供稿:网友

C# 玩转计算机系列(一)-操作系统服务

在平时的工作中经常会遇到检测或设置系统服务的情况,一般来说我们主要会遇到以下几种操作使用场景:

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:709617880namespace 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&hellip;…,在设置服务启动、停止、暂停、恢复 前需要判断该属性是否可设置,否则会报错。

可以写一个简单的winForm来操作系统服务,也是一个小工具,直接可以设置系统服务。

【下期预告】: C#玩转计算机系列-操作IIS服务


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表