亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中控制遠程計算機的服務的方法

2020-01-24 03:49:07
字體:
來源:轉載
供稿:網友
在.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 = "http:////"+host+"http://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( "http:////" +host+ "http://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( "http:////" +host+ "http://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) 

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 

//判斷是否可以停止 
if((bool)mo["AcceptStop"])//(string)mo["State"]=="Running" 
mo.InvokeMethod("StopService",null); 

catch(ManagementException e) 

strRst =e.Message; 

return strRst; 



在Win32ServiceManager中通過RemoteConnectValidate靜態方法來測試連接成功與否;另外提供了GetServiceValue方法和GetServiceList方法以及它的重載來獲取服務信息;后面的四個方法就是對服務的狀態控制了。 
下面建立一個簡單的窗口來使用它。 
大致的界面如下: 

通過vs.net 2003可以很快做出上面的窗體,下面列出了一些增加的代碼: 


using ZZ.Wmi; 
namespace ZZForm 

public class Form1 : System.Windows.Forms.Form 

//…… 
private Win32ServiceManager serviceManager; 
public Form1() 

InitializeComponent(); 
this.serviceManager = null; 

//…… 
[STAThread] 
static void Main() 

Application.Run(new Form1()); 

//修改服務狀態 
private void buttonChangeState_Click(object sender, System.EventArgs e) 

switch(((Button)sender).Text) 

case "啟動": 
string startRst = this.serviceManager.StartService(this.listViewService.SelectedItems[0].SubItems[0].Text); 
if(startRst==null) 
MessageBox.Show("操作成功,請點擊獲取刷新按鈕刷新結果!"); 
else 
MessageBox.Show(startRst); 
break; 
case "暫停": 
string startPause = this.serviceManager.PauseService(this.listViewService.SelectedItems[0].SubItems[0].Text); 
if(startPause==null) 
MessageBox.Show("操作成功,請點擊獲取刷新按鈕刷新結果!"); 
else 
MessageBox.Show(startPause); 
break; 
case "繼續": 
string startResume = this.serviceManager.ResumeService(this.listViewService.SelectedItems[0].SubItems[0].Text); 
if(startResume==null) 
MessageBox.Show("操作成功,請點擊獲取刷新按鈕刷新結果!"); 
else 
MessageBox.Show(startResume); 
break; 
case "停止": 
string startStop = this.serviceManager.StopService(this.listViewService.SelectedItems[0].SubItems[0].Text); 
if(startStop==null) 
MessageBox.Show("操作成功,請點擊獲取刷新按鈕刷新結果!"); 
else 
MessageBox.Show(startStop); 
break; 


//獲取和刷新數據 
private void buttonLoadRefresh_Click(object sender, System.EventArgs e) 

if(this.textBoxHost.Text.Trim().Length>0) 

if(this.textBoxHost.Text.Trim()==".") 

this.serviceManager = new Win32ServiceManager(); 

else 

if(Win32ServiceManager.RemoteConnectValidate(this.textBoxHost.Text.Trim(),this.textBoxName.Text.Trim(),this.textBoxPassword.Text.Trim())) 

this.serviceManager = new Win32ServiceManager(this.textBoxHost.Text.Trim(),this.textBoxName.Text.Trim(),this.textBoxPassword.Text.Trim()); 

else 

MessageBox.Show("連接到遠程計算機驗證錯誤."); 
return; 


string [,] services = serviceManager.GetServiceList(); 
this.listViewService.BeginUpdate(); 
this.listViewService.Items.Clear(); 
for(int i=0;i<services.GetLength(0);i++) 

ListViewItem item = new ListViewItem(new string[]{services[i,0],services[i,1],services[i,2],services[i,3]}); 
this.listViewService.Items.Add(item); 

this.listViewService.EndUpdate(); 

else 
MessageBox.Show("請輸入計算機名或IP地址"); 



說明,其實一個服務的屬性和方法除了上面這幾個還有很多,我們可以通過實例化ManagementClass類,使用它的Properties屬性和Methods屬性列出所有的屬性和方法。上面的Win32ServiceManager中生成的每個服務實例都是ManagementObejct類型的,其實還有一種強類型的類,可以通過編程和工具來生成。 
總結,通過引用System.Management命名空間,上面簡單的實現了通過訪問/root/cimv2:Win32_Service名稱空間對服務進行顯示和操作。此外,我們還可以通過訪問其他名稱空間來訪問計算機的一些硬件信息,軟件信息以及網絡等,有興趣的讀者可以研究一下。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲人成a一在线v站| 欧美怡春院一区二区三区| 欧美成人国产va精品日本一级| 成人免费淫片aa视频免费| 国内外成人免费激情在线视频| 亚洲乱码av中文一区二区| 国产精品久久久久久久天堂| 日韩欧美国产黄色| 在线观看欧美视频| 国产精品88a∨| 国产精品中文字幕在线| 57pao成人永久免费视频| 欧美大片在线看免费观看| 中文字幕在线成人| 精品爽片免费看久久| 欧美视频一区二区三区…| 欧美一级淫片videoshd| 精品色蜜蜜精品视频在线观看| 91精品视频在线播放| 最近中文字幕mv在线一区二区三区四区| 亚洲人成亚洲人成在线观看| 欧美视频免费在线观看| 裸体女人亚洲精品一区| 欧美性猛交xxxx富婆| 青草青草久热精品视频在线网站| 欧美黑人一区二区三区| 日韩一区av在线| 欧美裸身视频免费观看| 日韩国产精品视频| 永久免费看mv网站入口亚洲| 亚洲偷熟乱区亚洲香蕉av| 欧美电影在线播放| 美女视频久久黄| 国产精品视频免费在线| 国产91精品青草社区| 国产精品一区二区三区在线播放| 亚洲精品美女久久久| 国产91精品不卡视频| 久久韩剧网电视剧| 国产一区二区三区在线免费观看| 国产一区二区三区精品久久久| 日韩欧美在线观看| 久久精品中文字幕一区| 亚洲日本欧美日韩高观看| 1769国内精品视频在线播放| 久久艳片www.17c.com| 精品亚洲va在线va天堂资源站| 久久久久久成人精品| 精品免费在线观看| 啊v视频在线一区二区三区| 久久久久久中文字幕| 亚洲视频一区二区三区| 精品亚洲夜色av98在线观看| 欧美怡春院一区二区三区| 亚洲精品视频久久| 亚洲字幕一区二区| 色婷婷综合久久久久中文字幕1| 国产成人精品999| 欧美性感美女h网站在线观看免费| 久久久人成影片一区二区三区| 最近2019年中文视频免费在线观看| 欧美精品少妇videofree| 91精品在线看| 一本色道久久综合狠狠躁篇怎么玩| 日韩天堂在线视频| 国产视频999| 亚洲精品国产综合区久久久久久久| 日韩亚洲一区二区| 国产成人亚洲综合青青| 久久综合国产精品台湾中文娱乐网| 亚洲美女免费精品视频在线观看| 久久影视电视剧免费网站清宫辞电视| 国产做受高潮69| 久久国产色av| 国产成人精品最新| 亚洲美女av在线| 国产精品旅馆在线| xxav国产精品美女主播| 国产在线精品一区免费香蕉| 91精品免费久久久久久久久| 日韩av在线最新| 亚洲成人激情图| 精品久久久久久中文字幕一区奶水| 亚洲福利视频免费观看| 国产一区二中文字幕在线看| 日韩一区二区在线视频| 国产精品久久久一区| 日韩亚洲综合在线| 欧美中文字幕视频| 午夜精品视频网站| 性欧美暴力猛交69hd| 91精品久久久久久久久久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 日韩av成人在线观看| 国内外成人免费激情在线视频| 国产精品一区二区电影| 91性高湖久久久久久久久_久久99| 久久久国产一区| 色婷婷久久av| 日韩av电影在线网| 亚洲国产精品久久久久秋霞蜜臀| 欧美伦理91i| 97av在线播放| 国产精品久久婷婷六月丁香| 日韩久久午夜影院| 日韩高清欧美高清| 国产色视频一区| 国内久久久精品| 日韩成人久久久| 久久久人成影片一区二区三区| xxxxx成人.com| 日韩电影大全免费观看2023年上| 狠狠色狠狠色综合日日小说| 亚洲国产欧美一区二区丝袜黑人| 中文字幕日韩精品在线| 中文字幕亚洲欧美一区二区三区| 日韩精品在线观看一区| 久久精品国产精品亚洲| 欧美亚洲另类制服自拍| 久久久久久美女| 国产午夜精品麻豆| 国产精品久久久久999| 久久久国产精品视频| 一区二区三区 在线观看视| 欧美视频一区二区三区…| 神马久久久久久| 国产精品自拍视频| 日韩av在线直播| 81精品国产乱码久久久久久| 日韩亚洲综合在线| 欧美视频第一页| 欧美激情视频一区二区三区不卡| 97在线视频免费观看| 国产69精品久久久| 亚洲男人av在线| 亚洲图片欧美日产| 国产成人精品网站| 午夜精品久久久久久久久久久久久| 久久伊人精品一区二区三区| 中文字幕久久久av一区| 日韩av综合网站| 热久久99这里有精品| 91在线高清免费观看| 欧美激情一区二区三区成人| 成人美女免费网站视频| 91亚洲精品一区二区| 动漫精品一区二区| 亚洲第一天堂无码专区| 国产日韩中文字幕在线| 国产欧美一区二区三区在线看| 欧美另类在线观看| 久久天天躁狠狠躁夜夜躁| 国产午夜精品全部视频播放| 中文字幕不卡在线视频极品| 正在播放欧美一区| 欧美精品xxx| 日韩av影视综合网| 久久久久999| 日本久久久久久久| 欧洲亚洲女同hd| 亚洲精品久久7777777| 欧美性猛交xxxx乱大交极品| 久久人人97超碰精品888| 国产美女精品视频免费观看|