在平時的工作中經常會遇到檢測或設置系統服務的情況,一般來說我們主要會遇到以下幾種操作使用場景:
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服務