程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 玩轉計算機系列(一)-操作系統服務

C# 玩轉計算機系列(一)-操作系統服務

編輯: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: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服務

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved