C#获取进程和对进程的操作

时间:2021-07-14 19:50:35 

最近看到一个考试系统,有个功能是用来监视进程的。一旦发现如Communicator.exe这样的违禁软件就立即杀死进程并上报给服务器。我稍 微研究了一下,这个功能实现起来其实很简单。就是使用ManagementObjectSearcher获取进程列表,然后放在一个Collection 里,之后就可以按照自己的逻辑去做了。


using System;
using System.Management;

namespace ConsoleApplication3
{

    class Program
    {
        static void Main(string[] args)
        {
            // Show Process List
            Console.WriteLine("===========Process List===========");
            ManagementObjectCollection objects = new ManagementObjectSearcher("SELECT * FROM Win32_Process").Get();
            foreach (ManagementObject item in objects)
            {
                Console.WriteLine((item["Name"].ToString()));
            }

            // Create Ban List
            Console.WriteLine("===========Ban List===========");
            string lst = "Communicator.exe,POWERPNT.exe,notepad.exe";
            string[] bannedProc = lst.Split(‘,‘);
            foreach (string s in bannedProc)
            {
                Console.WriteLine(s);
            }

            // Search and Destroy
            Console.WriteLine("===========Search and Destroy===========");
            Console.WriteLine("Searching for banned process...");
            int count = 0;
            foreach (string item in bannedProc)
            {
                if (DetectProcess(item))
                {
                    count++;
                    Console.WriteLine("Process [{0}] Detected!", item);
                    Console.WriteLine("[{0}] was killed {1}.", item, KillProcess(item) ? "Successfully" : "Unsucessfully");
                }
            }
            Console.WriteLine("Done, {0} banned process found", count);
        }

        protected static bool DetectProcess(string pProcessName)
        {
            ManagementObjectCollection objects = new ManagementObjectSearcher("SELECT * FROM Win32_Process").Get();
            foreach (ManagementObject item in objects)
            {
                string str = item["Name"].ToString();
                if (str.Trim().ToUpper() == pProcessName.Trim().ToUpper())
                {
                    return true;
                }
            }
            return false;
        }

        public static bool KillProcess(string pProcessName)
        {
            ManagementObjectCollection objects = new ManagementObjectSearcher("SELECT * FROM Win32_Process").Get();
            foreach (ManagementObject item in objects)
            {
                string str = item["Name"].ToString();
                if (str.Trim().ToUpper() == pProcessName.Trim().ToUpper())
                {
                    string[] args = new string[] { "0" };
                    item.InvokeMethod("Terminate", args);
                    return true;
                }
            }
            return false;
        }
    }
}

效果如下:

C#获取进程和对进程的操作

标签:进程,操作
0
投稿

猜你喜欢

  • Java JDK 二分法 分析demo(推荐)

    2022-02-28 23:29:21
  • Spring Boot 员工管理系统超详细教程(源码分享)

    2022-04-18 13:32:26
  • C#中缓存的基本使用方法

    2023-02-23 13:47:44
  • C#获取程序文件相关信息的方法

    2021-12-12 05:34:51
  • Java实现NIO聊天室的示例代码(群聊+私聊)

    2023-11-29 00:57:45
  • 通过实例讲解springboot整合WebSocket

    2023-03-07 07:02:03
  • 深入浅出MappedByteBuffer(推荐)

    2023-11-14 19:59:43
  • Android实现摄像头拍照功能

    2022-04-25 13:05:55
  • Mybatis分页插件PageHelper的使用详解

    2022-02-26 16:43:05
  • SpringBoot使用Atomikos技术整合多数据源的实现

    2021-11-08 23:46:23
  • mybatis-plus 扩展批量新增的实现

    2023-07-14 14:24:13
  • java 中 poi解析Excel文件版本问题解决办法

    2023-11-15 16:49:45
  • C#通过正则表达式实现提取网页中的图片

    2022-03-30 05:03:03
  • Java简单验证身份证功能示例

    2023-08-15 23:36:32
  • 浅谈JAVA8给我带了什么——流的概念和收集器

    2021-09-24 03:14:04
  • C#/VB.NET实现PPT或PPTX转换为图像功能

    2023-01-25 05:14:37
  • Java 反射类型Type的用法说明

    2023-01-23 04:15:44
  • Java使用poi操作excel实例解析

    2022-01-26 00:15:41
  • C#中的委托介绍

    2023-07-27 13:26:23
  • 通过实例解析JMM和Volatile底层原理

    2023-05-20 19:10:48
  • asp之家 软件编程 m.aspxhome.com