C# 网络编程 进程管理
概念
进程是对一段静态指令序列(程序)的动态执行过程。与进程相关的信息包括进程的用户标志、正在执行的已经编译好的程序、进程程序、数据在存储器中的位置等。
在System.Diagnostics命名空间下,有一个Process类,用于完成与进程相关的处理任务。
一个应用程序执行时调用其他的应用程序,实际上就是对进程进行管理。
获取进程信息
(1) 获取本地计算机所有进程
Process[] myProcesses = Process.GetProcesses();
(2)获取本地计算机上指定名称的进程。
Process[] myProcesses =Process.GetProcessesByName("进程名称");注意:(a)进程名称不带扩展名。(b)可以是任何一个可执行文件
(3)获取远程计算机的所有进程。
Process[] myProcesses =Process.GetProcesses (remoteMachineName);例如:Process[] myProcesses =Process.GetProcesses ("192.168.0.1");
(4)获取远程计算机上指定名称的进程。
Process[] myProcesses = Process.GetProcessesByName("远程进程名称",remoteMachineName);
显示本机所有进程信息
private void GetAllProcess(){dataGridView1.Rows.Clear();myProcess = Process.GetProcesses();foreach (Process p in myProcess){int newRowIndex = dataGridView1.Rows.Add();DataGridViewRow row = dataGridView1.Rows[newRowIndex];row.Cells[0].Value = p.Id;row.Cells[1].Value = p.ProcessName;row.Cells[2].Value = string.Format("{0:###,##0.00}MB", p.WorkingSet64 / 1024.0f / 1024.0f);//有些进程无法获取启动时间和文件名信息,所以要用try/catchtry{row.Cells[3].Value = string.Format("{0}", p.StartTime);row.Cells[4].Value = p.MainModule.FileName;}catch{row.Cells[3].Value = "";row.Cells[4].Value = "";}}} private void ShowProcessInfo(Process p){StringBuilder sb = new StringBuilder();sb.AppendLine("进程名称:" + p.ProcessName + ", ID:" + p.Id);try{sb.AppendLine("进程优先级:" + p.BasePriority + "(优先级类别: " + p.PriorityClass + ")");ProcessModule m = p.MainModule;sb.AppendLine("文件名:" + m.FileName);sb.AppendLine("版本:" + m.FileVersionInfo.FileVersion);sb.AppendLine("描述:" + m.FileVersionInfo.FileDescription);sb.AppendLine("语言:" + m.FileVersionInfo.Language);sb.AppendLine("------------------------");if (p.Modules != null){ProcessModuleCollection pmc = p.Modules;sb.AppendLine("调用的模块(.dll):");for (int i = 1; i < pmc.Count; i++){sb.AppendLine("模块名:" + pmc[i].ModuleName + "\t" +"版本:" + pmc[i].FileVersionInfo.FileVersion + "\t" +"描述:" + pmc[i].FileVersionInfo.FileDescription);}}}catch{sb.AppendLine("其他信息:无法获取");}this.richTextBox1.Text = sb.ToString();}
启动和停止进程
1. 启动进程:
(1)创建一个Process组件的实例,例如:
Process myProcess = new Process();
(2)设置其对应的StartInfo属性,指定要运行的应用程序名以及传递的参数:
myProcess.StartInfo.FileName = “文件名”;
process1.StartInfo.Arguments = “参数”;
也可以初始化ProcessStartInfo类的新实例,并指定启动进程时使用的诸如应用程序或文档 的文件名,然后将Process组件的StartInfo属性设置为该ProcessStartInfo的实例。例如;
ProcessstartInfo ps=new ProcessstartInfo (“Notepad”);//准备执行Notepad.exe
myProcess.startInfo=ps;
如果该进程带有图形用户界面,也可以指定图形用户界面的打开方式。例如:
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
(3)调用该实例的Start方法启动该进程。
2. 停止进程
通过两种方法利用Process组件停止进程。
(1)如果进程有图形用户界面,调用CloseMainWindow方法。
(2)如果进程没有用户界面,调用进程的Kill方法。
不论有没有图形用户界面,如果希望强行让其退出,在权限允许的情况下,均可以调用Kill方法终止该进程。
private void buttonStart_Click(object sender, EventArgs e){string argument = Application.StartupPath + "\\myfile" + fileIndex + ".txt";if (File.Exists(argument)==false){File.CreateText(argument);}//设置要启动的应用程序名称及参数ProcessStartInfo ps = new ProcessStartInfo(fileName, argument);ps.WindowStyle = ProcessWindowStyle.Normal;fileIndex++;Process p = new Process();p.StartInfo = ps;p.Start();//等待启动完成,否则获取进程信息可能会失败p.WaitForInputIdle();RefreshListView();}private void buttonStop_Click(object sender, EventArgs e){this.Cursor = Cursors.WaitCursor;//创建新的Process组件的数组,并将它们与指定的进程名称(Notepad)的所有进程资源相关联.Process[] myprocesses;myprocesses = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(fileName));foreach (Process p in myprocesses){//通过向进程主窗口发送关闭消息达到关闭进程的目的p.CloseMainWindow();//等待1000毫秒Thread.Sleep(1000);//释放与此组件关联的所有资源p.Close();}fileIndex = 0;RefreshListView();this.Cursor = Cursors.Default;}

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
