using System;
using System.Management;
namespace SovSafe
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
class Service_WMI
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
private ManagementBaseObject iObj =
null;
private ManagementBaseObject oObj =
null;
private ManagementClass mc =
new ManagementClass(
"Win32_Service");
private
readonly ManagementObjectCollection moc;
public Service_WMI()
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
moc = mc.GetInstances();
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
/// <summary>
/// 查询服务模式
/// </summary>
/// <param name="serviceName">要查询的服务,为null 表示返回所有已禁用服务</param>
public
string GetDisabled(
string serviceName)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
string s = "";
foreach (ManagementObject mo
in moc)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
if (serviceName !=
null)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
//服务如果不为null
if (((
string)mo[
"Name"]).ToUpper() == serviceName.ToUpper())
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
return (
string)mo[
"StartMode"];
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
if ((
string)mo[
"StartMode"] ==
"Disabled")
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
s += mo[
"Name"].ToString() +
"\r\n";
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
return s;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
/// <summary>
/// 设置模式
/// </summary>
/// <param name="ServiceName">服务名</param>
/// <param name="startMode">模式,比如:Boot | System | Automatic | Manual | Disabled</param>
/// <returns>操作完成 True,否则 False</returns>
public
bool ChangeModeTo(
string serviceName,
string startMode)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
foreach (ManagementObject mo
in moc)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
//服务名存在
if (((
string)mo[
"Name"]).ToUpper() == serviceName.ToUpper())
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
// 如果服务已经是指定模式则返回
if ((
string)mo[
"StartMode"] == startMode)
return
false;
// 设置服务模式
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
iObj = mo.GetMethodParameters(
"ChangeStartMode");
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
iObj[
"StartMode"] = startMode;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
oObj = mo.InvokeMethod(
"ChangeStartMode", iObj,
null);
return
true;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
return
false;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
/// <summary>
/// 停止服务
/// </summary>
/// <param name="serviceName">服务名</param>
/// <returns>操作完成 True,否则 False</returns>
public
bool StopService(
string serviceName)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
foreach (ManagementObject mo
in moc)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
if (((
string)mo[
"Name"]).ToUpper() == serviceName.ToUpper())
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
if ((
bool)mo[
"AcceptStop"])
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
mo.InvokeMethod(
"StopService",
null);
return
true;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
return
false;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
/// <summary>
/// 启动服务
/// </summary>
/// <param name="serviceName">服务名</param>
/// <returns>操作完成 True,否则 False</returns>
public
bool StartService(
string serviceName)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
foreach (ManagementObject mo
in moc)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
if (((
string)mo[
"Name"]).ToUpper() == serviceName.ToUpper())
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
if ((
string)mo[
"State"] ==
"Stopped")
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
mo.InvokeMethod(
"StartService",
null);
return
true;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
if ((
string)mo[
"State"] ==
"Paused")
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
mo.InvokeMethod(
"ResumeService",
null);
return
true;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
return
false;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
/* 单步的方法
ManagementPath path=new ManagementPath();
path.Server=System.Environment.MachineName;
[url=mailto:path.NamespacePath=@%22root\CIMV2]path.NamespacePath=@"root\CIMV2[/url]";
path.RelativePath="Win32_service.Name='"+DropDownList1.SelectedItem.Text.ToString()+"'";
ManagementObject service=new ManagementObject(path);
ManagementBaseObject temp= service.InvokeMethod(status,null,null);
*/
转载于:https://blog.51cto.com/r00tsh3ll/181354