使用WMI来控制Windows服务
本文介绍如何使用WMI来判断服务是否存在、如何创建新服务,删除服务、如何启服务、停服务
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Threading;
namespace TJVictor.WMI
{
public class Win32_Service:WMIBaseClass
{
#region Property
private bool completed = false;
private int timeout = 30;
public int TimeOut
{
get { return timeout; }
set { timeout = value; }
}
private string wqlSelect = string.Empty;
#endregion
#region Construction
public Win32_Service()
: base()
{
wqlSelect = "select * FROM Win32_Service where Name='{0}'";
base.Connection();
}
public Win32_Service(string domain, string Ip, string user, string psd)
: base(domain, Ip, user, psd)
{
wqlSelect = "select * FROM Win32_Service where Name='{0}'";
base.Connection();
}
#endregion
#region public function
public bool IsServiceExist(string name)
{
if (!GetSelectQueryCollection(wqlSelect,name).Count.Equals(0))
return true;
return false;
}
public void StartService(string name)
{
if(!IsServiceExist(name))
throw new TJVictor.WMI.WmiException.ServiceException(string.Format("{0} 服务不存在",name));
object result = string.Empty;
ManagementObjectSearcher mos = GetObjectSearcher(wqlSelect, name);
foreach (ManagementObject mo in mos.Get())
{
result = mo.InvokeMethod("StartService", null);
break;
}
CheckExceptionClass.CheckServiceException(int.Parse(result.ToString()));
TestServiceState(mos, "Running", string.Format("{0} 服务在 {1} 机器上启动失败,启动超时",name,base.Ip));
}
public void StopService(string name)
{
if (!IsServiceExist(name))
throw new TJVictor.WMI.WmiException.ServiceException(string.Format("{0} 服务不存在", name));
object result = string.Empty;
ManagementObjectSearcher mos = GetObjectSearcher(wqlSelect, name);
foreach (ManagementObject mo in mos.Get())
{
result = mo.InvokeMethod("StopService", null);
break;
}
CheckExceptionClass.CheckServiceException(int.Parse(result.ToString()));
TestServiceState(mos, "Stopped", string.Format("{0} 服务在 {1} 机器上停止失败,停止超时", name, base.Ip));
}
public void CreateService(string name, string displayName, string startMode, string pathName, string startName, string startPassword,
string serviceType)
{
if(IsServiceExist(name))
throw new TJVictor.WMI.WmiException.ServiceException(string.Format("{0} 服务已经存在",name));
int tempTimeout = this.timeout;
ManagementClass processClass = new ManagementClass("Win32_Service");
processClass.Scope = base.Scope;
string method = "Create";
ManagementBaseObject inputArgs = processClass.GetMethodParameters(method);
inputArgs["Name"] = name;
inputArgs["DisplayName"] = displayName;
inputArgs["StartMode"] = startMode;
inputArgs["PathName"] = pathName;
if (!startName.Equals(string.Empty))
{
inputArgs["StartName"] = startName;
inputArgs["StartPassword"] = startPassword;
}
ManagementBaseObject ob = processClass.InvokeMethod(method, inputArgs, null);
CheckExceptionClass.CheckServiceException(int.Parse(ob["returnValue"].ToString()));
//检测服务是否已经安装成功
while (!IsServiceExist(name))
{
if (tempTimeout.Equals(0))
{
throw new TJVictor.WMI.WmiException.ServiceException(
string.Format("在 {0} 上安装 {1} 服务超时", base.Ip, name));
}
Thread.Sleep(1000);
tempTimeout--;
}
}
public void DeleteService(string name)
{
object result = string.Empty;
if(!IsServiceExist(name))
throw new TJVictor.WMI.WmiException.ServiceException(string.Format("{0} 服务不存在",name));
foreach (ManagementObject mo in GetSelectQueryCollection(wqlSelect, name))
{
result = mo.InvokeMethod("delete", null);
break;
}
//检测卸载命令是否执行成功
CheckExceptionClass.CheckServiceException(int.Parse(result.ToString()));
//检测服务是否已经卸载成功
int tempTimeout = this.timeout;
while (IsServiceExist(name))
{
if (tempTimeout.Equals(0))
{
throw new TJVictor.WMI.WmiException.ServiceException(
string.Format("在 {0} 上卸载 {1} 服务超时", base.Ip, name));
}
Thread.Sleep(1000);
tempTimeout--;
}
}
#endregion
#region private function
private void TestServiceState(ManagementObjectSearcher mos, string state,string errorMes)
{
completed = false;
int tempTimeout = timeout;
while (!completed)
{
if (tempTimeout.Equals(0))
{
throw new TJVictor.WMI.WmiException.ServiceException(errorMes);
}
foreach (ManagementObject mo in mos.Get())
{
if (mo["State"].ToString().Equals(state))
{
completed = true;
}
break;
}
Thread.Sleep(1000);
tempTimeout--;
}
}
#endregion
}
}
如需转载,请注明本文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor
使用WMI来控制Windows服务相关推荐
- asp.net 控制windows服务
asp.net 控制windows服务 最近做一个小的项目,经理要求winform与web都可操作.于是将其做成服务,winform下调用很简单.asp.net下大部分过程是一样的.但需要涉及到用户的 ...
- C#使用ServiceController控制windows服务
C#中,使用ServiceController类控制windows服务,使用之前要先添加引用:System.ServiceProcess,然后在命名空间中引用:using System.Service ...
- Windows 服务监控工具
在任何企业中,Windows 服务都是面向业务的应用程序的核心组件.这些 Windows 服务的有效运行对于防止网络和应用程序停机至关重要.这使得 Windows 服务监视成为任何网络管理策略的关键部 ...
- 编程打开Windows服务控制管理器
假设要自己编程来加载Windows下后缀为.sys的驱动程序:首先要使用 OpenSCManager 函数打开Windows服务控制管理器: 下面先来调用此函数看一下会不会打开成功:代码如下: #in ...
- 启动windows服务时出现“错误1053:服务没有及时响应启动或控制请求”的解决方法
服务器:windows server 20012 r2 windows服务已经正常安装成功,在"计算机管理->服务" 里面可以看到,但是启动服务的时候报"错误105 ...
- Windows服务没有及时响应启动或控制请求1053
参考链接: 解决"指定的服务已经标记为删除"问题 服务没有及时响应启动或控制请求 1053 关闭服务后,重新启动windows服务报错:"服务没有及时响应启动或控制请求 ...
- windows服务安装启动报错误1053:服务没有及时响应启动或控制请求
用.net 开发了一个C#语言的windows服务,在本地和测试环境,安装启动都正常,在新的线上环境报错,不能启动-报出-错误1053:服务没有及时响应启动或控制请求. 解决办法: 在App.conf ...
- wmi java_Java用wmi4j远程管理Windows服务
wmi4j是纯Java实现的Windows WMI客户端,它基于j-interop针对WMI重新封装,提供了更便捷的方法,能满足基本的windows管理,包括服务管理,性能查询,执行脚本等等. wmi ...
- Windows服务优化(整理篇)
如何查看正在启用的Windows服务项目 ①以WinXP为例,首先你要使用系统管理员账户或以拥有Administrator权限的用户身份登录,"运行 cmd.exe"命令,再输入& ...
最新文章
- K-Means算法理论及Python实现
- Zenoss学习杂记(十)
- vc6.0连接mysql数据库
- Spring Bean的装配(非XML文件方式)
- snmp 获取mac add table_R语言学习笔记(1)数据获取与数据重塑的第一部分
- html 转word c#,c#操作word类,进行html和word文档的互相转换
- maven 多模块项目
- excel匹配_「最全」Excel中查找匹配函数
- Android第二十四期 - 游戏公告跑马灯效果
- python3 写九九乘法表(python 小白进阶之旅)
- 【vuejs面试题】务必熟知的vuejs面试题「务必收藏」
- 血压预测常用数据集整理
- JS 生成英文字母 A-Z
- Java 基础类库:System、Runtime、Object、Math、日期、时间
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
- 计算机逆向工程专业,计算机软件反向工程的合法性研究
- 计算机启动键,U启动U盘启动盘一键启动按键大全
- mysql 创建事件_MySQL创建事件(CREATE EVENT)
- 计算机系的的毕业感言,计算机班同学的毕业感言
- Burg法参数化功率谱估计(Python实现版)
热门文章
- Android 上拉,下拉刷新。RecyclerView的使用(最后附完整代码)
- 百度红包预热活动被封锁
- 一篇教会你,Redis主从、哨兵、 Cluster集群。
- Android IMS 语音通话 vs 视频通话 vs 视频彩铃
- BUCK在轻载下的工作模式
- Xilinx FPGA 的快速启动
- 神经网络(从手撕到工具包)
- 世界公认十大健康水果
- INTEL RealSense-D415 在 Ubuntu 16.04 开发流程 4
- c语言辗转相除法约分分数,更相损减法和辗转相除法 求最大公约数和最小公倍数(C语言)...