欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现启动,关闭与查找进程的方法

程序员文章站 2022-07-06 12:43:54
本文实例讲述了c#实现启动,关闭与查找进程的方法。分享给大家供大家参考,具体如下: 运行效果截图如下: 查找/列出进程很容易,但干掉进程得借助系统命令ntsd.ex...

本文实例讲述了c#实现启动,关闭与查找进程的方法。分享给大家供大家参考,具体如下:

运行效果截图如下:

C#实现启动,关闭与查找进程的方法

查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :

using system;
using system.diagnostics;
using system.windows.forms;
namespace processdemo
{
  public partial class form1 : form
  {
    public form1()
    {
      initializecomponent();
    }
    private void form1_load(object sender, eventargs e)
    {
      this.linklabel1.links.add(0, linklabel1.text.length, "//www.jb51.net/");
    }
    private void linklabel1_linkclicked(object sender, linklabellinkclickedeventargs e)
    {
      this.linklabel1.links[linklabel1.links.indexof(e.link)].visited = true;
      string target = e.link.linkdata as string;
      if (target != null && target.startswith("http://"))
      {
        process.start(target);
      }
    }
    /// <summary>
    /// 列出所有可访问进程
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnlist_click(object sender, eventargs e)
    {
      process[] processes;
      processes = process.getprocesses();
      string str = "";
      foreach (process p in processes)
      {
        try
        {
          str = p.processname;
          this.lst1.items.add("名称:" + p.processname + ",启动时间:" + p.starttime.toshorttimestring() + ",进程id:" + p.id.tostring() );
        }
        catch (exception ex)
        {
          this.lst1.items.add(ex.message.tostring());//某些系统进程禁止访问,所以要加异常处理
        }
      }
    }
    private void btnfind_click(object sender, eventargs e)
    {
      txtfind.text = txtfind.text.trim().tolower();
      if (txtfind.text.length > 0) 
      {
        process[] arrp = process.getprocesses();
        foreach (process p in arrp)
        {
          try
          {
            if (p.processname.tolower() == txtfind.text)
            {
              messagebox.show(txtfind.text + " 找到了,pid为 " + p.id.tostring());
              return;
            }
          }
          catch { }
        }
        messagebox.show("未找到该进程,请检查输入!");
      }
    }
    private void btnkill_click(object sender, eventargs e)
    {
      txtfind.text = txtfind.text.trim().tolower();
      int pid = -1;
      if (txtfind.text.length > 0)
      {
        process[] arrp = process.getprocesses();
        foreach (process p in arrp)
        {
          try
          {
            if (p.processname.tolower() == txtfind.text)
            {
              pid = p.id;
              break;
            }
          }
          catch { }
        }
        if (pid != -1)
        {
          runcmd("ntsd -c q -p " + pid);
        }
      }
    }
    /// <summary>
    /// 运行dos命令
    /// dos关闭进程命令(ntsd -c q -p pid )pid为进程的id
    /// </summary>
    /// <param name="command"></param>
    /// <returns></returns>
    public string runcmd(string command)
    {
      process p = new process();
      p.startinfo.filename = "cmd.exe";
      p.startinfo.arguments = "/c " + command;
      p.startinfo.useshellexecute = false;
      p.startinfo.redirectstandardinput = true;
      p.startinfo.redirectstandardoutput = true;
      p.startinfo.redirectstandarderror = true;
      p.startinfo.createnowindow = true;
      p.start();
      return p.standardoutput.readtoend();
    }
  }
}

另外ntsd.exe在windows vista以上的版本(包括windows 2008)上,出于安全考虑已经被ms给去掉了,但我们可以直接从xp下复制过来继续使用,这里为方便大家给出ntsd.exe的。
希望本文所述对大家c#程序设计有所帮助。