解析C#中用Process类杀死进程,执行命令的深入分析
发布时间:2020-12-15 05:50:18 所属栏目:百科 来源:网络整理
导读:c#之process类相关整理 一、根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 复制代码 代码如下: using System.Diagnostics; using System.Management; static void Main(string[] args) { foreach (Process p in Process.GetProcesses
c#之process类相关整理 一、根据进程名获取进程的用户名? 需要添加对 System.Management.dll 的引用 复制代码 代码如下: using System.Diagnostics; using System.Management; static void Main(string[] args) { foreach (Process p in Process.GetProcesses()) { Console.Write(p.ProcessName); Console.Write("----"); Console.WriteLine(GetProcessUserName(p.Id)); } Console.ReadKey(); } private static string GetProcessUserName(int pID) { string text1 = null; SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID); ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1); try { foreach (ManagementObject disk in searcher1.Get()) { ManagementBaSEObject inPar = null; ManagementBaSEObject outPar = null; inPar = disk.GetMethodParameters("GetOwner"); outPar = disk.InvokeMethod("GetOwner",inPar,null); text1 = outPar["User"].ToString(); break; } } catch { text1 = "SYSTEM"; } return text1; } 进程名 是 p.ProcessName 二、获取进程 using System.Diagnostics; 【注】System.Diagnostics 命名空间提供特定的类,使您能够与系统进程、事件日志和性能计数器进行交互。 复制代码 代码如下: string str = ""; Process[] processes; //Get the list of current active processes. processes = System.Diagnostics.Process.GetProcesses(); //Grab some basic information for each process. Process process; for(int i = 0;i<processes.Length-1;i++) { process = processes[i]; str = str + Convert.ToString(process.Id) + " : " + process.ProcessName + "rn"; } System.Windows.Forms.MessageBox.Show(str); txtProcessID.Text = processes[0].Id.ToString(); //显示进程相关信息 string s = ""; System.Int32 processid; Process process; processid = Int32.Parse(txtProcessID.Text); process = System.Diagnostics.Process.GetProcessById(processid); s = s + "该进程的总体优先级类别:" + Convert.ToString(process.PriorityClass) + " rn"; s = s + "由该进程打开的句柄数:" + process.HandleCount + "rn"; s = s + "该进程的主窗口标题:" + process.MainWindowTitle + "rn"; s = s + " 该进程允许的最小工作集大小:" + process.MinWorkingSet.ToString() + " rn"; s = s + "该进程允许的最大工作集大小:" + process.MaxWorkingSet.ToString() + " rn"; s = s + "该进程的分页内存大小:" + process.PagedMemorySize + "rn"; s = s + "该进程的峰值分页内存大小:" + process.PeakPagedMemorySize + "rn"; System.Windows.Forms.MessageBox.Show(s); } catch { System.Windows.Forms.MessageBox.Show("不合法的进程ID!"); } 【注】Int32 值类型表示值介于-2,147,483,648 到+2,647 之间的有符号整数。 Int32 提供了一些方法,来比较该类型的实例、将实例的值转换为它的String 表示形式以及将数字的String 表示形式转换为该类型的实例。 有关格式规范代码如何控制值类型的String 表示形式的信息,请参阅格式设置概述。 此类型实现接口IComparable、IFormattable 和IConvertible。使用Convert 类进行转换,而不是使用此类型的IConvertible 显式接口成员实现。 值得一提的是,Process 类具有很多成员变量,这些成员变量可以获得进程的几乎每一个细节。上面的例子中只是简单地选择了几个成员加以演示。如果开发中有需要,可以参考MSDN Library,查询Process类成员以获得更详细的信息,这里就不一一列出了。 三、杀死进程 复制代码 代码如下: private void button2_Click(object sender,EventArgs e) { if (listView1.SelectedItems.Count > 0) { try { string proName = listView1.SelectedItems[0].Text; Process[] p = Process.GetProcessesByName(proName); p[0].Kill(); MessageBox.Show("进程关闭成功!"); GetProcess(); } catch { MessageBox.Show("无法关闭此进程!"); } } else { MessageBox.Show("请选择要终止的进程!"); } } 四、C#中利用process类调用外部程序以及执行dos命令 复制代码 代码如下: private string RunCmd(string command) { //实例一个Process类,启动一个独立进程 Process p = new Process(); //Process类有一个StartInfo属性 //设定程序名 p.StartInfo.FileName = "cmd.exe"; //设定程式执行参数 p.StartInfo.Arguments = "/c " + command; //关闭Shell的使用 p.StartInfo.UseShellExecute = false; //重定向标准输入 p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; //重定向错误输出 p.StartInfo.RedirectStandardError = true; //设置不显示窗口 p.StartInfo.CreateNoWindow = true; //启动 p.Start(); //也可以用这种方式输入要执行的命令 //不过要记得加上Exit要不然下一行程式执行的时候会当机 //p.StandardInput.WriteLine(command); //p.StandardInput.WriteLine("exit"); //从输出流取得命令执行结果 return p.StandardOutput.ReadToEnd(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |