(转)使用C#控制远程计算机的服务

摘要:
但我认为,与通过WMI操作服务相比,它的功能可能有点简单,而且操作多个服务可能会比较麻烦,也不可能列出系统中所有服务的具体数据。下面是如何使用系统管理组件来操作远程和本地计算机上的服务。如果您需要获取详细的WMI信息,请参阅MSDN。系统管理组件提供对大量管理信息和管理事件集合的访问。这些信息和事件与根据Windows管理规范结构为系统、设备和应用程序设置检查点有关。
在.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的类把服务的一些相关操作包装了一下,代码如下:
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
publicclass
Win32ServiceManager
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
privatestring
strPath;
(转)使用C#控制远程计算机的服务第2张
private
ManagementClassmanagementClass;
(转)使用C#控制远程计算机的服务第2张
publicWin32ServiceManager():this(".",null,null
)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
publicWin32ServiceManager(stringhost,stringuserName,stringpassword)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
this.strPath="\\"+host+"\root\cimv2:Win32_Service"
;
(转)使用C#控制远程计算机的服务第2张
this.managementClass=new
ManagementClass(strPath);
(转)使用C#控制远程计算机的服务第2张
if(userName!=null&&userName.Length>0
)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张ConnectionOptionsconnectionOptions
=new
ConnectionOptions();
(转)使用C#控制远程计算机的服务第2张connectionOptions.Username
=
userName;
(转)使用C#控制远程计算机的服务第2张connectionOptions.Password
=
password;
(转)使用C#控制远程计算机的服务第2张ManagementScopemanagementScope
=newManagementScope("\\"+host+"\root\cimv2"
,connectionOptions);
(转)使用C#控制远程计算机的服务第2张
this.managementClass.Scope=
managementScope;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//验证是否能连接到远程计算机

(转)使用C#控制远程计算机的服务第2张
publicstaticboolRemoteConnectValidate(stringhost,stringuserName,stringpassword)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张ConnectionOptionsconnectionOptions
=new
ConnectionOptions();
(转)使用C#控制远程计算机的服务第2张connectionOptions.Username
=
userName;
(转)使用C#控制远程计算机的服务第2张connectionOptions.Password
=
password;
(转)使用C#控制远程计算机的服务第2张ManagementScopemanagementScope
=newManagementScope("\\"+host+"\root\cimv2"
,connectionOptions);
(转)使用C#控制远程计算机的服务第2张
try

(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张managementScope.Connect();
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
catch
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnmanagementScope.IsConnected;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//获取指定服务属性的值
(转)使用C#控制远程计算机的服务第2张
publicobjectGetServiceValue(stringserviceName,stringpropertyName)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张ManagementObjectmo
=this
.managementClass.CreateInstance();
(转)使用C#控制远程计算机的服务第2张mo.Path
=newManagementPath(this.strPath+".Name=""+serviceName+"""
);
(转)使用C#控制远程计算机的服务第2张
return
mo[propertyName];
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//获取所连接的计算机的所有服务数据
(转)使用C#控制远程计算机的服务第2张
publicstring[,]GetServiceList()
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
string[,]services=newstring[this.managementClass.GetInstances().Count,4
];
(转)使用C#控制远程计算机的服务第2张
inti=0
;
(转)使用C#控制远程计算机的服务第2张
foreach(ManagementObjectmointhis
.managementClass.GetInstances())
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张services[i,
0]=(string)mo["Name"
];
(转)使用C#控制远程计算机的服务第2张services[i,
1]=(string)mo["DisplayName"
];
(转)使用C#控制远程计算机的服务第2张services[i,
2]=(string)mo["State"
];
(转)使用C#控制远程计算机的服务第2张services[i,
3]=(string)mo["StartMode"
];
(转)使用C#控制远程计算机的服务第2张i
++
;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnservices;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//获取所连接的计算机的指定服务数据
(转)使用C#控制远程计算机的服务第2张
publicstring[,]GetServiceList(stringserverName)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
returnGetServiceList(newstring[](转)使用C#控制远程计算机的服务第1张{serverName}
);
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//获取所连接的计算机的的指定服务数据
(转)使用C#控制远程计算机的服务第2张
publicstring[,]GetServiceList(string[]serverNames)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
string[,]services=newstring[serverNames.Length,4
];
(转)使用C#控制远程计算机的服务第2张ManagementObjectmo
=this
.managementClass.CreateInstance();
(转)使用C#控制远程计算机的服务第2张
for(inti=0;i<serverNames.Length;i++
)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张mo.Path
=newManagementPath(this.strPath+".Name=""+serverNames[i]+"""
);
(转)使用C#控制远程计算机的服务第2张services[i,
0]=(string)mo["Name"
];
(转)使用C#控制远程计算机的服务第2张services[i,
1]=(string)mo["DisplayName"
];
(转)使用C#控制远程计算机的服务第2张services[i,
2]=(string)mo["State"
];
(转)使用C#控制远程计算机的服务第2张services[i,
3]=(string)mo["StartMode"
];
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnservices;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//停止指定的服务
(转)使用C#控制远程计算机的服务第2张
publicstringStartService(stringserviceName)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
stringstrRst=null
;
(转)使用C#控制远程计算机的服务第2张ManagementObjectmo
=this
.managementClass.CreateInstance();
(转)使用C#控制远程计算机的服务第2张mo.Path
=newManagementPath(this.strPath+".Name=""+serviceName+"""
);
(转)使用C#控制远程计算机的服务第2张
try

(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
if((string)mo["State"]=="Stopped")//!(bool)mo["AcceptStop"]

(转)使用C#控制远程计算机的服务第2张
mo.InvokeMethod("StartService",null);
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
catch(ManagementExceptione)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张strRst
=
e.Message;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnstrRst;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//暂停指定的服务
(转)使用C#控制远程计算机的服务第2张
publicstringPauseService(stringserviceName)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
stringstrRst=null
;
(转)使用C#控制远程计算机的服务第2张ManagementObjectmo
=this
.managementClass.CreateInstance();
(转)使用C#控制远程计算机的服务第2张mo.Path
=newManagementPath(this.strPath+".Name=""+serviceName+"""
);
(转)使用C#控制远程计算机的服务第2张
try

(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
//判断是否可以暂停

(转)使用C#控制远程计算机的服务第2张
if((bool)mo["acceptPause"]&&(string)mo["State"]=="Running")
(转)使用C#控制远程计算机的服务第2张mo.InvokeMethod(
"PauseService",null
);
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
catch(ManagementExceptione)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张strRst
=
e.Message;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnstrRst;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//恢复指定的服务
(转)使用C#控制远程计算机的服务第2张
publicstringResumeService(stringserviceName)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
stringstrRst=null
;
(转)使用C#控制远程计算机的服务第2张ManagementObjectmo
=this
.managementClass.CreateInstance();
(转)使用C#控制远程计算机的服务第2张mo.Path
=newManagementPath(this.strPath+".Name=""+serviceName+"""
);
(转)使用C#控制远程计算机的服务第2张
try

(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
//判断是否可以恢复

(转)使用C#控制远程计算机的服务第2张
if((bool)mo["acceptPause"]&&(string)mo["State"]=="Paused")
(转)使用C#控制远程计算机的服务第2张mo.InvokeMethod(
"ResumeService",null
);
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
catch(ManagementExceptione)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张strRst
=
e.Message;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnstrRst;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//停止指定的服务
(转)使用C#控制远程计算机的服务第2张
publicstringStopService(stringserviceName)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
stringstrRst=null
;
(转)使用C#控制远程计算机的服务第2张ManagementObjectmo
=this
.managementClass.CreateInstance();
(转)使用C#控制远程计算机的服务第2张mo.Path
=newManagementPath(this.strPath+".Name=""+serviceName+"""
);
(转)使用C#控制远程计算机的服务第2张
try

(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
//判断是否可以停止

(转)使用C#控制远程计算机的服务第2张
if((bool)mo["AcceptStop"])//(string)mo["State"]=="Running"
(转)使用C#控制远程计算机的服务第2张
mo.InvokeMethod("StopService",null);
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
catch(ManagementExceptione)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张strRst
=
e.Message;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
returnstrRst;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第204张}

(转)使用C#控制远程计算机的服务第205张

在Win32ServiceManager中通过RemoteConnectValidate静态方法来测试连接成功与否;另外提供了GetServiceValue方法和GetServiceList方法以及它的重载来获取服务信息;后面的四个方法就是对服务的状态控制了。
下面建立一个简单的窗口来使用它。
大致的界面如下:
(转)使用C#控制远程计算机的服务第206张
通过vs.net 2003可以很快做出上面的窗体,下面列出了一些增加的代码:
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
publicclass
Form1:System.Windows.Forms.Form
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
//……

(转)使用C#控制远程计算机的服务第2张
privateWin32ServiceManagerserviceManager;
(转)使用C#控制远程计算机的服务第2张
public
Form1()
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张InitializeComponent();
(转)使用C#控制远程计算机的服务第2张
this.serviceManager=null
;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//……
(转)使用C#控制远程计算机的服务第2张
[STAThread]
(转)使用C#控制远程计算机的服务第2张
staticvoid
Main()
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张Application.Run(
new
Form1());
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//修改服务状态
(转)使用C#控制远程计算机的服务第2张
privatevoidbuttonChangeState_Click(objectsender,System.EventArgse)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
switch
(((Button)sender).Text)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
case"启动"
:
(转)使用C#控制远程计算机的服务第2张
stringstartRst=this.serviceManager.StartService(this.listViewService.SelectedItems[0].SubItems[0
].Text);
(转)使用C#控制远程计算机的服务第2张
if(startRst==null
)
(转)使用C#控制远程计算机的服务第2张MessageBox.Show(
"操作成功,请点击获取刷新按钮刷新结果!"
);
(转)使用C#控制远程计算机的服务第2张
else

(转)使用C#控制远程计算机的服务第2张MessageBox.Show(startRst);
(转)使用C#控制远程计算机的服务第2张
break;
(转)使用C#控制远程计算机的服务第2张
case"暂停"
:
(转)使用C#控制远程计算机的服务第2张
stringstartPause=this.serviceManager.PauseService(this.listViewService.SelectedItems[0].SubItems[0
].Text);
(转)使用C#控制远程计算机的服务第2张
if(startPause==null
)
(转)使用C#控制远程计算机的服务第2张MessageBox.Show(
"操作成功,请点击获取刷新按钮刷新结果!"
);
(转)使用C#控制远程计算机的服务第2张
else

(转)使用C#控制远程计算机的服务第2张MessageBox.Show(startPause);
(转)使用C#控制远程计算机的服务第2张
break;
(转)使用C#控制远程计算机的服务第2张
case"继续"
:
(转)使用C#控制远程计算机的服务第2张
stringstartResume=this.serviceManager.ResumeService(this.listViewService.SelectedItems[0].SubItems[0
].Text);
(转)使用C#控制远程计算机的服务第2张
if(startResume==null
)
(转)使用C#控制远程计算机的服务第2张MessageBox.Show(
"操作成功,请点击获取刷新按钮刷新结果!"
);
(转)使用C#控制远程计算机的服务第2张
else

(转)使用C#控制远程计算机的服务第2张MessageBox.Show(startResume);
(转)使用C#控制远程计算机的服务第2张
break;
(转)使用C#控制远程计算机的服务第2张
case"停止"
:
(转)使用C#控制远程计算机的服务第2张
stringstartStop=this.serviceManager.StopService(this.listViewService.SelectedItems[0].SubItems[0
].Text);
(转)使用C#控制远程计算机的服务第2张
if(startStop==null
)
(转)使用C#控制远程计算机的服务第2张MessageBox.Show(
"操作成功,请点击获取刷新按钮刷新结果!"
);
(转)使用C#控制远程计算机的服务第2张
else

(转)使用C#控制远程计算机的服务第2张MessageBox.Show(startStop);
(转)使用C#控制远程计算机的服务第2张
break;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
//获取和刷新数据
(转)使用C#控制远程计算机的服务第2张
privatevoidbuttonLoadRefresh_Click(objectsender,System.EventArgse)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
if(this.textBoxHost.Text.Trim().Length>0
)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
if(this.textBoxHost.Text.Trim()=="."
)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
this.serviceManager=new
Win32ServiceManager();
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
else
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张
if(Win32ServiceManager.RemoteConnectValidate(this.textBoxHost.Text.Trim(),this.textBoxName.Text.Trim(),this
.textBoxPassword.Text.Trim()))
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第2张
this.serviceManager=newWin32ServiceManager(this.textBoxHost.Text.Trim(),this.textBoxName.Text.Trim(),this
.textBoxPassword.Text.Trim());
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
else
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张{
(转)使用C#控制远程计算机的服务第2张MessageBox.Show(
"连接到远程计算机验证错误."
);
(转)使用C#控制远程计算机的服务第2张
return
;
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
string[,]services=serviceManager.GetServiceList();
(转)使用C#控制远程计算机的服务第2张
this
.listViewService.BeginUpdate();
(转)使用C#控制远程计算机的服务第2张
this
.listViewService.Items.Clear();
(转)使用C#控制远程计算机的服务第2张
for(inti=0;i<services.GetLength(0);i++
)
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张
(转)使用C#控制远程计算机的服务第1张
{
(转)使用C#控制远程计算机的服务第3张(转)使用C#控制远程计算机的服务第4张ListViewItemitem
=newListViewItem(newstring[](转)使用C#控制远程计算机的服务第1张{services[i,0],services[i,1],services[i,2],services[i,3]}
);
(转)使用C#控制远程计算机的服务第2张
this
.listViewService.Items.Add(item);
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
this.listViewService.EndUpdate();
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第2张
else
(转)使用C#控制远程计算机的服务第2张MessageBox.Show(
"请输入计算机名或IP地址");
(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第12张}

(转)使用C#控制远程计算机的服务第204张}

(转)使用C#控制远程计算机的服务第205张
说明,其实一个服务的属性和方法除了上面这几个还有很多,我们可以通过实例化ManagementClass类,使用它的Properties属性和Methods属性列出所有的属性和方法。上面的Win32ServiceManager中生成的每个服务实例都是ManagementObejct类型的,其实还有一种强类型的类,可以通过编程和工具来生成。
总结,通过引用System.Management命名空间,上面简单的实现了通过访问\root\cimv2:Win32_Service名称空间对服务进行显示和操作。此外,我们还可以通过访问其他名称空间来访问计算机的一些硬件信息,软件信息以及网络等,有兴趣的读者可以研究一下。

免责声明:文章转载自《(转)使用C#控制远程计算机的服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NPOI导出EXCEL数据量大,分多个sheet显示数据3D数据采集和重建下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

@ConfigurationProperties 配置详解

文章转自 https://blog.csdn.net/qq_26000415/article/details/78942494 前言新的一年到了,在这里先祝大家新年快乐.我们在上一篇spring boot 源码解析12-servlet容器的建立 中 分析 ServerProperties时,发现其类上有@ConfigurationProperties 注解...

Java读取Properties配置文件

1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,使用键值对的形式来保存属性集。不过Properties的键和值都是字符串类型。 2.Properties中的主要方法 (1)load(InputStream inStream) 此方法可以从.properties属性文件对应的文件...

问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args

设置与读取C#控制台应用程序Main函数中的参数args在项目属性面版->调试->命令行参数设置。空格分隔。读取:string[] str = Environment.GetCommandLineArgs(); Main函数是C#应用程序的入口点,Main函数可以有四种签名,分别如下: static void Main() static vo...

C#细说多线程(下)

本文主要从线程的基础用法,CLR线程池当中工作者线程与I/O线程的开发,并行操作PLINQ等多个方面介绍多线程的开发。 其中委托的BeginInvoke方法以及回调函数最为常用。而 I/O线程可能容易遭到大家的忽略,其实在开发多线程系统,更应该多留意I/O线程的操作。特别是在ASP.NET开发当中,可能更多人只会留意在客户端使用Ajax或者在服务器端使用U...

基于Android 9.0 电池温度异常提醒

极力推荐Android 开发大总结文章:欢迎收藏Android 开发技术文章大总结 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、 Framework 层字符串添加 二、Service 中实时监测 电池异常温度并弹窗提醒用户 检测电池温度,提示用户温度异常,请注意 Android 电池信息状态主要是...

黑马程序员----java基础--String字符串

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、String类概述 java中用String类进行描述对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。对象封装后,可以定义N多属性和行为。 String类是final的,也就是说它没有子类。 二、String字符串的特点...