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服务

C# 玩转计算机系列(一)-操作系统服务,布布扣,bubuko.com

时间: 2024-11-07 06:08:16

C# 玩转计算机系列(一)-操作系统服务的相关文章

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

之前由于工作需要自己做一个一键部署的小工具,实现三个模块的功能:TFS操作创建映射并获取最新源代码:SQL Server数据库注册表配置数据库连接:IIS站点部署,生成可访问的IIS站点.由于是基于自己的工作环境下的开发,所以在TFS和SQL Server配置工具化实现,有一些点是默认按照公司的环境配置参数默认的,虽然不是广泛适用每一种情况的环境部署,但是在学习这三个模块的开发过程中,还是有很多东西是可以值得分享的. 今天先分享一下,如何通过工具化实现IIS站点部署和配置,为了可复用性,IIS操

玩转JS系列之代码加载篇

从前我们这样写js <script type="text/javascript"> function a(){ console.log('a init');}function b(){ console.log('b init'); a(); } </script> 随着功能越来越多,我们开始把js分离,使用单独的js文件来写,然后使用下面的方式引入js <script src="a.js" type="text/javascr

【玩转SQLite系列】(一)初识SQLite,重拾sql语句

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53230842 本文出自[DylanAndroid的博客] [玩转SQLite系列](一)初识SQLite,重拾sql语句 SQLite由于是一个轻型的嵌入式的数据库,被应用于Android系统当中.在Android开发中 我们难免会用到SQLite数据库.接下来用一系列的文章来数据一下SQLite数据库. 一.认识SQLite 1.什么是SQLite SQLite,是一款轻型

第12章 GPIO输入-按键检测—零死角玩转STM32-F429系列

第12章 ????GPIO输入-按键检测 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ? 本章参考资料:<STM32F4xx参考手册>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm>. 按键检测使用到GPIO外设的基本输入功能,本章中不再赘述GPIO外设的概念,如您忘记了,可重读前面"GPIO框图剖析"小

【玩转SQLite系列】(六)SQLite数据库应用案例实现历史搜索记录

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53366564 本文出自[DylanAndroid的博客] [玩转SQLite系列]文章目录 [玩转SQLite系列](一)初识SQLite,重拾sql语句 [玩转SQLite系列](二)SQLite创建和打开数据库的三种方式 [玩转SQLite系列](三)通过sql语句操作SQLite数据库 [玩转SQLite系列](四)通过Android提供的API操作SQLite数据库

[Linux] PHP程序员玩转Linux系列-lnmp环境的搭建

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 在平常的工作中,我作为PHP程序员经常要搭建一下环境,这个环境就是Linux系统下安装nginx,php,mysql这三个软件,对软件进行配置,然后在浏览器上能够正常打开运行查看项目.CentOS中安装软件有好几种方式,我经常用的是包安装方式,因为这种非常简单一句命令就能安装成功,这也是与windows下安装软件最大的不同点.包安装方式就一个关键单词就是yum. 解决找不到nginx包的问题 我先安装一下web服务器nginx,按好这

欣技8系列常用操作

调整背光亮度                   先按住背光键,再按上下键调整 调整屏幕对比度                先按住背光键,再按左右键调整 进入系统菜单                   按住7,9,电源键开机 进入内核菜单                   按住1,7,电源键开机(先进入系统菜单再关机才生效) 清空所有程序                   进入内核菜单第1项,再同时按FN和9超过5秒    清除所有数据                   进入系统菜单第

[Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 8.PHP程序员玩转Linux系列-Nginx中的HTTPS 首先遇到的问题

假定某系统提供硬件的访管指令(例如形式:“svc n”),为了实现系统调用,系统设计者应做哪些工作?用户又如如何请求操作系统服务?

工作: 1.  编写并调试好能实现各种功能的例行子程序. 2.  编写并调试好访管中断处理程序. 3.  构造例行子程序入口地址表. 在用户程序中,需要请求操作系统服务的地方安排一条系统调用.这样,当程序执行到这一条命令时,就会发生中断,系统由用户态转为管态,操作系统的访管中断处理程序得到控制权,它将按系统调用的功能号,借助例行子程序入口地址表转到相应的例行子程序去执行,在完成了用户所需要的服务功能后,退出中断,返回到用户程序的断点继续执行.