zoukankan      html  css  js  c++  java
  • 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();
    }

    转载出处

  • 相关阅读:
    局域网内的邮件收发
    小菜鸟入门nginx
    记一次结巴分词.net core 2.0版 nuget发布过程
    记一次 .net core publish 之后找不到视图文件的问题
    eShopOnContainer 第一步
    Ocelot网关统一查看多个微服务asp.net core项目的swagger API接口
    在Azure中创建asp.net core 应用
    微服务监控zipkin、skywalking以及日志ELK监控系列
    微服务监控zipkin+asp.net core
    Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)
  • 原文地址:https://www.cnblogs.com/yukaizhao/p/csharp_process.html
Copyright © 2011-2022 走看看