C#远程启动、终止进程

程序说明备忘:
    整个程序是远程启动一个进程,然后再查询进程列表,并显示出来,然后远程终止在列表中选择的进程,这样一个过程。

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 ,"出现错误!" ) ;
    } 
   }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值