using System;
using System.Management;
namespace ArLi.CommonPrj {
public class Service_WMI {
public static readonly System.Version myVersion = new System.Version(1,1);
private ManagementBaseObject iObj = null;
private ManagementBaseObject oObj = null;
private ManagementClass mc = new ManagementClass(@"//arli/Win32/Service");
private readonly ManagementObjectCollection moc;
public Service_WMI(){
moc = mc.GetInstances();
}
///
/// 远程WMI 构造
///
/// 计算机名
/// 用户名,域用户可用 username@domain
/// 密码
public Service_WMI(string remoteComputerName, string userName, string passWord) {
moc = GetServiceCollection(remoteComputerName, userName, passWord);
}
private ManagementObjectCollection GetServiceCollection(string remoteComputerName, string userName, string passWord) {
ManagementObjectCollection returnWMIcollection = null;
ConnectionOptions co = new ConnectionOptions();
co.Username = userName;
co.Password = passWord;
System.Management.ManagementScope ms = new System.Management.ManagementScope("" + remoteComputerName + "//root//cimv2", co);
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_Service");
ManagementObjectSearcher query = new ManagementObjectSearcher(ms,oq);
returnWMIcollection = query.Get();
return returnWMIcollection;
}
///
/// 查询服务模式
///
/// 要查询的服务,为null 表示返回所有已禁用服务
public string GetStartMode(string serviceName) {
string s="";
foreach(ManagementObject mo in moc) {
if (serviceName != null) { //服务如果不为null
if (((string)mo["Name"]).ToUpper() == serviceName.ToUpper()) {
return (string)mo["StartMode"];
}
}
if ((string) mo["StartMode"] == "Disabled") {
s += mo["Name"].ToString() + "/r/n"; //自己改成想要的格式
//你可以用displayname,上面的是ServiceName,下面这个是DisplayName
//s += mo["DisplayName"].ToString() + "/r/n";
};
}
return s;
}
///
/// 设置模式
///
/// 服务名
/// 模式,比如:Boot/System/Automatic/Manual/Disabled
/// 操作完成 1,否则 0
public int ChangeTo(string serviceName, string startMode) {
foreach(ManagementObject mo in moc) {
//服务名存在
if (((string)mo["Name"]).ToUpper() == serviceName.ToUpper()) {
// 如果服务已经是指定模式则返回
if ((string) mo["StartMode"] == startMode) return 0;
// 设置服务模式
iObj = mo.GetMethodParameters("ChangeStartMode");
iObj["StartMode"] = startMode;
oObj = mo.InvokeMethod("ChangeStartMode", iObj, null);
return 1;
}
}
return 0;
}
}
}