程序说明备忘:
整个程序是远程启动一个进程,然后再查询进程列表,并显示出来,然后远程终止在列表中选择的进程,这样一个过程。
private ManagementScope Ms = null;
private ManagementObjectCollection Collection = null;
private ArrayList processList = new ArrayList();
if(null == Ms)
{
ConnectionOptions connOP = new ConnectionOptions();
connOP.Username = "192.168.168.XX//username";
connOP.Password = "password";
ManagementPath RemoteNameSpace = new ManagementPath("192.168.168.XX//root//cimv2");
Ms = new ManagementScope(RemoteNameSpace,connOP);
}
try
{
//连接到实际操作的WMI范围
Ms.Connect ( ) ;
//设定通过WMI要查询的内容
ObjectQuery Query = new ObjectQuery ( "SELECT * FROM Win32_Process" ) ;
//WQL语句,设定的WMI查询内容和WMI的操作范围,检索WMI对象集合
ManagementObjectSearcher Searcher = new ManagementObjectSearcher ( Ms , Query ) ;
//异步调用WMI查询
Collection = Searcher.Get ( ) ;
listBox1.Items.Clear ( ) ;
processList.Clear();
foreach (ManagementObject service in Collection)
{
//由于是测试,未将所有进程列出,只显示了notepad.exe进程
if(service["Name"].Equals("test.exe"))
{
processList.Add(service);
listBox1.Items.Add("Service: " + service["Name"] + " Process ID: " + service["ProcessID"]);
listBox1.ForeColor = Color.Blue;
}
}
}
catch( Exception ee )
{
MessageBox.Show ( "连接" + "asd" + "出错,出错信息为:" + ee.Message ,"出现错误!" ) ;
}
try
{
Ms.Connect();
//建立对远程的进程操作对象
ManagementClass processClass = new ManagementClass(Ms,new ManagementPath("Win32_Process"),null);
//获得用来提供参数的对象
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
//设定命令行参数
inParams["CommandLine"] = "D://XX//app.exe";
//执行程序
ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null);
//刷新列表
BtnList_Click(null,null);
}
catch( Exception ee )
{
MessageBox.Show ( "连接" + "asd" + "出错,出错信息为:" + ee.Message ,"出现错误!" ) ;
}
if( (processList.Count > 0) && (listBox1.Items.Count > 0) && (listBox1.SelectedIndex > -1))
{
try
{
//停止一个进程
((ManagementObject)processList[listBox1.SelectedIndex]).InvokeMethod(new ManagementOperationObserver(),"Terminate",null);
//刷新列表
//processList.RemoveAt(listBox1.SelectedIndex);
//listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
catch( Exception ee )
{
MessageBox.Show ( "连接" + "asd" + "出错,出错信息为:" + ee.Message ,"出现错误!" ) ;
}
}