本示例建立两个项目,一个Process1作为外部进程的示例,一个KillProcess项目--完成启动和杀死外部进程的工作。
先创建一个winfrom窗体项目Process1。
然后添加一个新的winfrom窗体项目KillProcess,添加类ProcessMag,其代码如下:
using System.Diagnostics;
using System.Windows.Forms;
public class ProcessMag { public Process pss;//定义进程 /// <summary>启动外部进程</summary> public void ExeProcess() { //打开程序进程函数 if (pss == null) { pss = new System.Diagnostics.Process(); String path = System.IO.Path.Combine((Application.StartupPath + @"\Process1.exe"));//文件放置在根目录下 pss.StartInfo.FileName = path; pss.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; pss.Start(); } else { if (pss.HasExited) //是否正在运行 { pss.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; pss.Start(); } } } //关闭进程 public bool KillPss(Process[] pro, string ProcessName) { for (int i = 0; i < pro.Length; i++)//遍历所有查找到的进程 { string pssname = pro[i].ProcessName; //Console.WriteLine("进程" + i.ToString() + ":" + pssname); if (pssname.ToUpper() == ProcessName.ToUpper()) //if (pro[i].Id == 6736) { try { pro[i].Kill();//结束进程 Console.WriteLine("已杀死进程:'" + ProcessName + "'."); return true; } catch(Exception ex) { Console.WriteLine("杀死进程'" + ProcessName + "'失败!"); return false; } } } return false; } }
主窗体代码如下:
using System.Diagnostics; public partial class FormKill : Form { ProcessMag _processMag = new ProcessMag(); Process[] _pro = null; public FormKill() { InitializeComponent(); } private void FormKill_Load(object sender, EventArgs e) { _processMag.ExeProcess();//启动外部进程 timer1.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false; _pro = Process.GetProcesses();//获取已开启的所有进程 label_pssnum.Text = "进程总数:" + _pro.Length.ToString(); } private void button1_Click(object sender, EventArgs e) { bool ok = _processMag.KillPss(_pro, "Process1"); //bool ok = _processMag.KillPss(_pro, "vchost");//Windows Update string rst = ok ? "成功" : "失败"; label_result.Text = "执行结果:" + rst; } }