停止或开启系统服务-续(远程调用)

来源:互联网 发布:最好的安卓编程语言 编辑:程序博客网 时间:2024/05/16 10:32

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;

              }

       }

}

原创粉丝点击