C# 操作本地或远程服务

using System;
using System.Management;
namespace ServicesManage
{
     public class Win32ServiceManager
     {
         private string strPath; private ManagementClass managementClass;
         public Win32ServiceManager()
             : this(".", null, null)
         {
         }
         public Win32ServiceManager(string host, string userName, string password) " + host + " //root//cimv2:Win32_Service ";
         {
             this.strPath = "
             this.managementClass = new ManagementClass(strPath);
             if (userName != null && userName.Length > 0)
             {
                 ConnectionOptions connectionOptions = new ConnectionOptions(); connectionOptions.Username = userName;
                 connectionOptions.Password = password;
                 ManagementScope managementScope = new ManagementScope(" " + host + " //root//cimv2 ", connectionOptions);
                 this.managementClass.Scope = managementScope;
             }
         }
         // 验证是否能连接到远程计算机
         public static bool RemoteConnectValidate(string host, string userName, string password)
         {
             ConnectionOptions connectionOptions = new ConnectionOptions();
             if (!host.Equals(".") && !host.Equals("127.0.0.1"))//判断是否为本地,本地不需要帐号和密码。这个问题搞了我很久
             {
                 connectionOptions.Username = userName;
                 connectionOptions.Password = password; " + host + " //root//cimv2 ", connectionOptions);
             }
             ManagementScope managementScope = new ManagementScope("
             try
             {
                 managementScope.Connect();
             }
             catch(Exception ee)
             {
                
             }
             return managementScope.IsConnected;
         }
         // 获取指定服务属性的值
         public object GetServiceValue(string serviceName, string propertyName)
         {
             ManagementObject mo = this.managementClass.CreateInstance();
             mo.Path = new ManagementPath(this.strPath + ".Name=/"" + serviceName + "/"");
             return mo[propertyName];
         }
         // 获取所连接的计算机的所有服务数据
         public string[,] GetServiceList()
         {
             string[,] services = new string[this.managementClass.GetInstances().Count, 4]; int i = 0;
             foreach (ManagementObject mo in this.managementClass.GetInstances())
             {
                 services[i, 0] = (string)mo["Name"]; services[i, 1] = (string)mo["DisplayName"];
                 services[i, 2] = (string)mo["State"];
                 services[i, 3] = (string)mo["StartMode"];
                 i++;
             }
             return services;
         }
         // 获取所连接的计算机的指定服务数据
         public string[,] GetServiceList(string serverName)
         {
             return GetServiceList(new string[] { serverName });
         }
         // 获取所连接的计算机的的指定服务数据
         public string[,] GetServiceList(string[] serverNames)
         {
             string[,] services = new string[serverNames.Length, 4];
             ManagementObject mo = this.managementClass.CreateInstance();
             for (int i = 0; i < serverNames.Length; i++)
             {
                 mo.Path = new ManagementPath(this.strPath + ".Name=/"" + serverNames[i] + "/"");
                 services[i, 0] = (string)mo["Name"];
                 services[i, 1] = (string)mo["DisplayName"];
                 services[i, 2] = (string)mo["State"];
                 services[i, 3] = (string)mo["StartMode"];
             } return services;
         }
         // 开启指定的服务
         public string StartService(string serviceName)
         {
             string strRst = null;
             ManagementObject mo = this.managementClass.CreateInstance();
             mo.Path = new ManagementPath(this.strPath + ".Name=/"" + serviceName + "/"");
             try
             {
                 if ((string)mo["State"] == "Stopped")
                 {
                 //(bool)mo["AcceptStop"]
                     mo.InvokeMethod("StartService",null);
                 }
             }
             catch (ManagementException e) { strRst = e.Message; }
             return strRst;
         }
         // 暂停指定的服务
         public string PauseService(string serviceName)
         {
             string strRst = null;
             ManagementObject mo = this.managementClass.CreateInstance();
             mo.Path = new ManagementPath(this.strPath + ".Name=/"" + serviceName + "/"");
             try
             {
                 //判断是否可以暂停
                 if ((bool)mo["acceptPause"] && (string)mo["State"] == "Running")
                 {
                     mo.InvokeMethod("PauseService", null);
                 }
             }
             catch (ManagementException e)
             {
                 strRst = e.Message;
             }
             return strRst;
         }
         // 恢复指定的服务
         public string ResumeService(string serviceName)
         {
             string strRst = null;
             ManagementObject mo = this.managementClass.CreateInstance();
             mo.Path = new ManagementPath(this.strPath + ".Name=/"" + serviceName + "/"");
             try
             {
                 //判断是否可以恢复
                 if ((bool)mo["acceptPause"] && (string)mo["State"] == "Paused")
                 {
                     mo.InvokeMethod("ResumeService", null);
                 }
             }
             catch (ManagementException e)
             {
                 strRst = e.Message;
             }
             return strRst;
         }
         // 停止指定的服务
         public string StopService(string serviceName)
         {
             string strRst = null;
             ManagementObject mo = this.managementClass.CreateInstance();
             mo.Path = new ManagementPath(this.strPath + ".Name=/"" + serviceName + "/"");
             try
             {
                 //判断是否可以停止
                 //(string)mo["State"]=="Running"
                 if ((bool)mo["AcceptStop"])
                 {
                     mo.InvokeMethod("StopService", null);
                 }
             }
             catch (ManagementException e)
             {
                 strRst = e.Message;
             }
             return strRst;
         }
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值