解析C#中用Process类杀死进程,执行命令的深入分析

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 + "\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();
}

(0)

相关推荐

  • c#使用process.start启动程序报错解决方法

    出错信息: 复制代码 代码如下: Unknown error (0xffffffff)at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)at System.Diagnostics.Process.Start()at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)at System.Diagnostics.Proc

  • C#使用Process类调用外部exe程序

    在编写程序时经常会使用到调用可执行程序的情况,本文将简单介绍C#调用exe的方法.在C#中,通过Process类来进行进程操作. Process类在System.Diagnostics包中. 示例一 复制代码 代码如下: using System.Diagnostics; Process p = Process.Start("notepad.exe"); p.WaitForExit();//关键,等待外部程序退出后才能往下执行 通过上述代码可以调用记事本程序,注意如果不是调用系统程序,

  • c#启动EXE文件的方法实例

    1.调用系统dll使用其提供的方法. 引用的dll, 复制代码 代码如下: [DllImport("kernel32.dll")]    public static extern int WinExec(string exeName, int operType); 调用,WinExec(@"路径\exe的文件名", 参数); operType参数如下 复制代码 代码如下: 0: 隐藏, 并且任务栏也没有最小化图标  1: 用最近的大小和位置显示, 激活  2: 最小

  • 简单掌握Windows中C#启动外部程序进程的方法

    许多用户在程序开发过程中需要使用C#启动一个外部程序(进程),在使用完毕该外部程序后,又希望能将其关闭.我们特在此对C#启动和关闭外部进程的方法进行一个简单的介绍. C#启动外部程序(进程)有两种方法:一种是直接使用C#提供的Process类,利用类的函数操作来直接启动外部程序:另一种方法是使用传统的Win32 API函数CreateProcess来实现外部进程的启动. 使用C#提供的Process类来启动外部程序方法比较简单,例举代码如下: using System.Diagnostics;

  • C#实现软件监控外部程序运行状态的方法

    本文实例讲述了C#实现软件监控外部程序运行状态的方法.分享给大家供大家参考.具体方法如下: 需要外挂一个程序,用于监控另一个程序运行状态,一旦检测到另一程序关闭,就触发一个事件做其他处理. 引用的类 复制代码 代码如下: using System.Diagnostics;//引入Process 类 声明 复制代码 代码如下: private Process[] MyProcesses; 主要处理部分,该段代码可放在定时器中循环检测监控的程序是否启动 复制代码 代码如下: MyProcesses

  • C#使用Process类调用外部程序分解

    在程序开发中,一个程序经常需要去调用其他的程序,C#中Process类正好提供了这样的功能.它提供对本地和远程进程的访问并使您能够启动和停止本地系统进程. 一.启动进程实例 复制代码 代码如下: Process myProcess = new Process();   try  {       myProcess.StartInfo.UseShellExecute = false;       myProcess.StartInfo.FileName = "test.exe";    

  • C#调用执行外部程序的实现方法

    本文实例讲述了C#调用执行外部程序的实现方法.分享给大家供大家参考.具体分析如下: 这里以调用notepad为例演示C#调用执行外部程序的方法. class Test { static void Main (string [] args) { System.Diagnostics.Process.Start ("notepad.exe"); } } 希望本文所述对大家的C#程序设计有所帮助.

  • 浅谈C#中Process类的使用详解

    Process类的作用是对系统进程进行管理,我们使用Process类中的一些方法结合Winform开发个简单的进程管理器: 在使用Process类的时候,先导入命名空间System.Diagnostics.使用Winform画出如上的界面,数据显示使用的是Listview.在窗体的Load事件中写出如下代码: 复制代码 代码如下: private void Form1_Load(object sender, EventArgs e)    { listView1.FullRowSelect =

  • C#启动外部程序的几种常用方法汇总

    本文汇总了C#启动外部程序的几种常用方法,非常具有实用价值,主要包括如下几种方法: 1. 启动外部程序,不等待其退出. 2. 启动外部程序,等待其退出. 3. 启动外部程序,无限等待其退出. 4. 启动外部程序,通过事件监视其退出. 实现代码如下: // using System.Diagnostics; private string appName = "calc.exe"; /// <summary> /// 1. 启动外部程序,不等待其退出 /// </summ

  • 解析C#中用Process类杀死进程,执行命令的深入分析

    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("----&

  • C#的Process类调用第三方插件实现PDF文件转SWF文件

    在项目开发过程中,有时会需要用到调用第三方程序实现本系统的某一些功能,例如本文中需要使用到的swftools插件,那么如何在程序中使用这个插件,并且该插件是如何将PDF文件转化为SWF文件的呢?接下来就会做一个简单的介绍. 在.NET平台中,对C#提供了一个操作对本地和远程的访问进程,使能够启动和停止系统进程.这个类就是System.Diagnostics.Process,我们首先来了解一下该类. 一.解析System.Diagnostics.Process类 在C#中使用Process类可以提

  • Java Process类的详解及实例代码

    Java Process类的详解 前言: 今天用了下Java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档. 对Process类的简要说明: Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序  该类提供进程的输入.执行输出到进程.等待进程的完成和检查进程的退出状态及销毁进程的方法 ProcessBuilder.start()和Runtime.exec方法创建

  • Android 杀死进程几种方法详细介绍

    Android 杀死进程: 对于进程结束在开发APP应用当中还是有必要的,这里整理了三种方法,大家可以根据需求选用. 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程. android.os.Process.killProcess(android.os.Process.myPid()) 接下来实践一下: <RelativeLayout xmlns:android="http://schemas.androi

  • 详解Go语言中用 os/exec 执行命令的五种方法

    完整系列教程详见:http://golang.iswbm.com 在 Golang 中用于执行命令的库是 os/exec,exec.Command 函数返回一个 Cmd 对象,根据不同的需求,可以将命令的执行分为三种情况 只执行命令,不获取结果 执行命令,并获取结果(不区分 stdout 和 stderr) 执行命令,并获取结果(区分 stdout 和 stderr) 第一种:只执行命令,不获取结果 直接调用 Cmd 对象的 Run 函数,返回的只有成功和失败,获取不到任何输出的结果. pack

  • Java中Process类的使用与注意事项说明

    目录 Process类的使用与注意事项说明 1.在项目开发中 2.在这里就需要认识一下process类 3.来说说今天业务需求[waitfor()]: 4.前不久遇到一个奇怪的问题就是ajax调用没有返回值 java的Process深入讲解 Process类的使用与注意事项说明 1.在项目开发中 经常会遇到调用其它程序功能的业务需求,在java中通常有两种实现方法 Runtime runtime = Runtime.getRuntime(); Process p = runtime.exec(c

  • Java编程使用Runtime和Process类运行外部程序的方法

    本文实例讲述了Java编程使用Runtime和Process类运行外部程序的方法.分享给大家供大家参考,具体如下: 使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序. 1. exec(String command) 2. exec(String command, String envp[], File dir) 3. exec(String cmd, String envp[]) 4. exec(String cmdarray[]) 5. exec(

随机推荐