C#使用Process类杀死进程,执行命令等

摘要:
C#的进程类组织如下:1.根据进程名称获取进程的用户名?使用Convert类进行转换,而不是使用此类型的IConvertable显式接口成员实现。值得一提的是,Process类有许多成员变量,它们几乎可以获得流程的每个细节。如果在开发过程中有必要,您可以参考MSDN Library来查询Process类成员以获取更多详细信息,这里将不列出这些信息。“);GetProcess();}捕获{MessageBox.Show(”无法关闭此进程!“);}否则{MessageBox.Show(“请选择要终止的进程!

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 + "
";
}
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) + " 
";
s = s + "由该进程打开的句柄数:" + process.HandleCount + "
";
s = s + "该进程的主窗口标题:" + process.MainWindowTitle + "
";
s = s + " 该进程允许的最小工作集大小:" + process.MinWorkingSet.ToString() + " 
";
s = s + "该进程允许的最大工作集大小:" + process.MaxWorkingSet.ToString() + " 
";
s = s + "该进程的分页内存大小:" + process.PagedMemorySize + "
";
s = s + "该进程的峰值分页内存大小:" + process.PeakPagedMemorySize + "
";
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类杀死进程,执行命令等》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python17_Linux系统中安装Python3、virtualenv、virtualenvwrapper阿里巴巴数据阿里80亿贷款细节曝光 并购背后图谋大数据下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JSF: 动态生成的DataTable, 固定表头, 固定行标

自己写了段小代码, 希望可以供大家学习和参考。 代码里没有太多注释, 有时间的话我会补充上去。自己在写动态生成DataTable的时候也查阅了很多相关文章, 以及实现固定表头等等。在解决固定表头问题上我是用的两张表(加行标是3张表)实现的, 因为我发现如果用JSF1.1的化实现固定表头几乎不可能(如果有人有好的想法, 比如用JS比较在行的朋友请告诉我解决方...

jsTree通过AJAX从后台获取数据

页面代码: <div id="MenuTree"></div> javascript代码: $(document).ready(function($) { InitMenuTree(); }); functionInitMenuTree() { $('#MenuTree').data('jstree', false);...

c# HttpWebResponse 调用WebApi

public static class WebApiCaller { public static string HttpPost(string url, string body) { try { //ServicePointManager...

springMVC使用map接收入参 + mybatis使用map 传入查询参数

 测试例子: controllel层 ,使用map接收请求参数,通过Debug可以看到,请求中的参数的值都是字符串形式,如果将这个接收参数的map直接传入service,mybatis接收参数时会报错,因此要先对请求中的参数进行预处理 1 package org.slsale.test; 2 3 import java.util.Date; 4...

Effective Modern C++:05右值引用、移动语义和完美转发

         移动语义使得编译器得以使用成本较低的移动操作,来代替成本较高的复制操作;完美转发使得人们可以撰写接收任意实参的函数模板,并将其转发到目标函数,目标函数会接收到与转发函数所接收到的完全相同的实参。右值引用是将这两个不相关的语言特性连接起来的底层语言机制,正是它使得移动语义和完美转发成了可能。 23:理解std::move和std::forw...

Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数

1.主要布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/too...