手机
当前位置:查字典教程网 >编程开发 >C#教程 >解析C#中用Process类杀死进程,执行命令的深入分析
解析C#中用Process类杀死进程,执行命令的深入分析
摘要:c#之process类相关整理一、根据进程名获取进程的用户名?需要添加对System.Management.dll的引用复制代码代码如下:u...

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,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();

}

【解析C#中用Process类杀死进程,执行命令的深入分析】相关文章:

c# 获取数据库中所有表名称的方法

经典的委托排序(深入分析)

使用Deflate算法对文件进行压缩与解压缩的方法详解

基于C#委托的深入分析

解析C#中的装箱与拆箱的详解

解析C#中如何把控件的边框角画为圆弧

解析C#中委托的同步调用与异步调用(实例详解)

基于C#中XmlReader读取Xml的深入分析

C#中StringBuilder用法以及和String的区别分析

C#中执行批处理文件(*.bat)的方法代码

精品推荐
分类导航