程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用C#控制遠程計算機的服務

使用C#控制遠程計算機的服務

編輯:C#入門知識

 在.net中提供了一些類來顯示和控制Windows系統上的服務,並可以實現對遠程計算機服務服務的訪問,如System.ServiceProcess命名空間下面的ServiceController 類,System.Management下面的一些WMI操作的類。雖然用

ServiceController可以很方便的實現對服務的控制,而且很直觀、簡潔和容易理解。但是我認為他的功能同通過WMI來操作服務相比,那可能就有些單一了,並且對多個服務的操作可能就比較麻煩,也無法列出系統中的所有服務的具體數據。這裡要講的就是如何使用System.Management組件來操作遠程和本地計算機上的服務。

    WMI作為Windows 2000操作系統的一部分提供了可伸縮的,可擴展的管理架構.公共信息模型(CIM)是由分布式管理任務標准協會(DMTF)設計的一種可擴展的、面向對象的架構,用於管理系統、網絡、應用程序、數據庫和設備。Windows管理規范也稱作CIM for Windows,提供了統一的訪問管理信息的方式。如果需要獲取詳細的WMI信息請讀者查閱MSDN。System.Management組件提供對大量管理信息和管理事件集合的訪問,這些信息和事件是與根據 Windows 管理規范 (WMI) 結構對系統、設備和應用程序設置檢測點有關的。
       
  但是上面並不是我們最關心的,下面才是我們需要談的話題。

  毫無疑問,我們要引用System.Management.Dll程序集,並要使用System.Management命名空間下的類,如ManagementClass,ManagementObject等。下面用一個名為Win32ServiceManager的類把服務的一些相關操作包裝了一下,代碼如下:
using System;
using System.Management;
namespace ZZ.Wmi
{
     public class Win32ServiceManager
     {
         private string strPath;
         private ManagementClass managementClass;
         public Win32ServiceManager():this(".",null,null)
         {
         }
         public Win32ServiceManager(string host,string userName,string password)
         {
              this.strPath = "\\"+host+"\root\cimv2:Win32_Service";
              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();
              connectionOptions.Username = userName;
              connectionOptions.Password = password;
              ManagementScope managementScope = new ManagementScope( "\\" +host+ "\root\cimv2",connectionOptions) ;
              try
              {
                   managementScope.Connect();
              }
              catch
              {
              }
              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)
         {
             

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved