- c#之process类相关整理
- 2010-06-11 10:55
- 一、根据进程名获取进程的用户名?
- 需要添加对 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 + "\\r\\n";
- }
- 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) + " \\r\\n";
- s = s + "由该进程打开的句柄数:" + process.HandleCount + "\\r\\n";
- s = s + "该进程的主窗口标题:" + process.MainWindowTitle + "\\r\\n";
- s = s + " 该进程允许的最小工作集大小:" + process.MinWorkingSet.ToString() + " \\r\\n";
- s = s + "该进程允许的最大工作集大小:" + process.MaxWorkingSet.ToString() + " \\r\\n";
- s = s + "该进程的分页内存大小:" + process.PagedMemorySize + "\\r\\n";
- s = s + "该进程的峰值分页内存大小:" + process.PeakPagedMemorySize + "\\r\\n";
- System.Windows.Forms.MessageBox.Show(s);
- }
- catch
- {
- System.Windows.Forms.MessageBox.Show("不合法的进程ID!");
- }
- 【注】Int32 值类型表示值介于-2,147,483,648 到+2,147,483,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();
- }
- //该片段来自于http://www.codesnippet.cn/detail/2005201512619.html
来源: http://www.codesnippet.cn/detail/2005201512619.html