C#下的查杀进程

进程

   .net对进程管理的封装非常好,通过System.Diagnostics.Process.GetProcesses()方法可以获得系统内各进程的数组,通过枚举可获得系统内的所有进程(比Windows自带的进程浏览器看到的还多)。
    ProcessName属性获得的是文件名的前缀,即NotePad,不包含后面的.exe。

    要获得更多的信息,需要取得Modules属性数组,但并不是每个进程都能获取Modules属性,所以必须要使用try..catch语句排除异常。该数组的第一个成员[ 0 ].FileName包含了执行程序的完整文件名,等同于ProcessModule;序号大于0的成员往往包含该程序调用的dll信息,得到的结果很有点像反木马程序。

    Kill()方法用来杀进程,被杀的程序不会弹出类似保存文件的对话框,是个十足的冷血的快刀手。

    StartInfo属性是用于启动新进程的,不适用于检索已运行的进程。

private void btnProcess_Click(object sender, System.EventArgs e)
        {
            System.Diagnostics.Process []myPs ;
            myPs=System.Diagnostics.Process.GetProcesses();
            this.richTextBox1.Clear();
            foreach (System.Diagnostics.Process p   in myPs)
            {
                if (p.Id!=0 )
                {
                    string myS="进程名称"+p.ProcessName+"  ID:"+p.Id.ToString();
                    try//由于进程不同,有的进程不包含Modules信息,所以要用try保护
                    {
                        if (p.Modules !=null)
                            if (p.Modules.Count>0)
                            {
                                System.Diagnostics.ProcessModule pm=p.Modules[0];

                                myS+="\n Modules[0].FileName:"+pm.FileName;
                                myS+="\n Modules[0].ModuleName:"+pm.ModuleName;
                                myS+="\n Modules[0].FileVersionInfo:\n"+pm.FileVersionInfo.ToString();
                                if (pm.FileName.ToLower()==this.textBox1.Text.Trim().ToLower())
                                    p.Kill();
                            }
                    }
                    catch
                    {}
                    finally
                    {
                        this.richTextBox1.Text += myS+"\n==========================\n";
                    }
                }
            }

        程序的执行结果片段:

进程名称SearchNet  ID:3092
 Modules[0].FileName:C:\Program Files\SearchNet\SearchNet.exe
 Modules[0].ModuleName:SearchNet.exe
 Modules[0].FileVersionInfo:
File:             C:\Program Files\SearchNet\SearchNet.exe
InternalName:     SearchNet
OriginalFilename:
FileVersion:      1, 0, 2, 4
FileDescription:  IE地址栏搜索程序
Product:          地址栏搜索
ProductVersion:   1, 0, 2, 4
Debug:            False
Patched:          False
PreRelease:       False
PrivateBuild:     False
SpecialBuild:     False
Language          中文(中国)

==========================
进程名称svchost  ID:1700
 Modules[0].FileName:C:\WINDOWS\system32\svchost.exe
 Modules[0].ModuleName:svchost.exe
 Modules[0].FileVersionInfo:
File:             C:\WINDOWS\system32\svchost.exe
InternalName:     svchost.exe
OriginalFilename: svchost.exe
FileVersion:      5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
FileDescription:  Generic Host Process for Win32 Services
Product:          Microsoft Windows Operating System
ProductVersion:   5.1.2600.2180
Debug:            False
Patched:          False
PreRelease:       False
PrivateBuild:     False
SpecialBuild:     False
Language          英语(美国)

时间: 2024-08-02 19:40:36

C#下的查杀进程的相关文章

如何在Windows查看端口占用情况及查杀进程

我们平时在做web开发运行web服务器或运行某个应用时会报错,提示该应用的端口号已被占用,我们可以用以下的方法解决. 解决方法一:重新为应用配置端口. 解决方法二:找到占用端口的应用并关闭该应用释放占用的端口: 1.win+r运行cmd或在开菜单的运行中运行 2.运行命令 netstat -aon|findstr "8888" netstat -ano 查看所有已占用的端口 findstr "要查看的端口" 查找指端口的占用情况 可以看到我要查找的"888

Mac 和Linux下查看端口占用及查杀进程

常用netstat去查询,想找到对应的进程去杀,一直记不住,记到空间里,以后可以方便随时翻阅 netstat命令 netstat -an | grep 80 80替换成需要grep的端口号 lsof命令 通过list open file命令可以查看到当前打开文件,在linux中所有事物都是以文件形式存在,包括网络连接及硬件设备. lsof -i:80 -i参数表示网络链接,:80指明端口号,该命令会同时列出PID,方便kill 小计:重启sudo apachectl start 后最后发现是代理

linux下开源查杀病毒软件clamav的安装

1   安装clamav(anti virulus) 1.1安装压缩和解压缩函数库 zlib  源代码:http://zlib.net/ 安装时的最新版本为:zlib1.2.7.tar.gz 安装过程为cd到下载到的源文件目录后使用下述命令进行:tar -xzvf zlib.tar.gz  ;  ./condifure ;  make ; make install 1.2  下载clamav的源代码 1  http://www.clamav.net/lang/en/download/source

Shell脚本实现查杀子进程、僵尸进程_linux shell

核心服务器上跑了一堆的脚本.程序,难免有时候会出现僵尸进程,死不死活不活的在那里占用资源,最初只是写了个根据关键字查杀进程的linux shell脚本,后来发现很多时候进程死在那里的时候其实是内部调用子进程的时候出现了问题,这时候光杀父进程根本没解决根本问题.比如说rsync的时候通过ssh来连接,rsync本身没问题,但可能ssh死掉了.因此重新写了脚本,递归查找子进程. 复制代码 代码如下: #!/bin/sh # 递归找到导致进程僵死的最底层子进程并杀除. ParentProcessID=

kill命令"-1"这个参数到底是杀进程还是reload?(转)

  kill-1:重新读取一次参数的配置文件 (类似 reload) 这句话给我的感觉是把进程杀掉后重启进程,即 reload.而我查了下 man kill,-1 对应的 signal 是 SIGHUP,用个find / -perm +7000 > /dev/null 2>&1 &命令试验了下确实是杀进程,鸟哥说反了? SIGHUP - hangup or exit a foreground running process from a terminal 原因:对daemon是

关闭瑞星“空闲时段查杀” 看视频不受打扰

以前总是忙忙碌碌,几年来我的生活轨迹都是这样的:早7:30分准时出发去上班,下班后接着到媳妇的店帮忙去:周末单位有休,可我还是得忙活自己的那一摊.处于这样的一种生活状态下,家里的电脑就是个摆设,很少用. 终于苦尽甜来,我的房子终于真正的姓"赵"了.店里也可以再多雇一个人,不用再每天抓我去做"店小二".现在晚上可以和正常人一样,上QQ和朋友聊聊天,或者是到网上找些自己喜欢的电影之类的视频来看,感觉真是幸福呀. 在享受网络带给我的快乐的同时,偶尔也会碰到一些小小的烦恼.

360解决未知病毒查杀难题 误杀率降到最低限

中新网1月7日电近日,360安全专家石晓虹博士向媒体表示,360杀毒通过采用国际领先的"启发式扫描"技术与360软件白名单技术,不但有效解决了未知病毒的查杀难题,而且将同样困扰杀毒软件多年的误杀率降到了最低限. 据360安全专家石晓虹博士介绍,传统的特征码杀毒引擎在捕获到病毒样本后才能查杀,总是滞后于病毒的传播.为了摆脱跟在病毒身后疲于奔命的困境,国际上领先的杀毒软件尝试运用"启发式扫描"对付未知病毒,就是让杀毒软件具有学习能力,通过行为判断.文件结构分析等手段,在

根据PID进程号查杀病毒木马

  根据PID进程号查杀病毒木马 对遇到的"顽固"病毒进程,可以通过系统的内置命令--ntsd,强行杀死一切病毒进程.(除System进程.SMSS.EXE进程.CSRSS.EXE进程不能"对付"外,基本可以对付其它一切进程.但是在使用该命令杀死病毒进程之前,需要先查找到对应病毒进程的具体进程号.) 考虑到系统进程列表界面在默认状态下,是不显示具体进程号的,因此,可用以下方法: (1)打开系统任务管理器窗口,再单击"查看"菜单项下面的"

Linux 僵尸进程查杀

僵尸进程概念      僵尸进程(Zombie process)通俗来说指那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 书面形式一点:一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.通过ps命令查看其带有defunct的标志.僵尸进程是一个早已死亡的进程,但在进程表 (processs table)中仍占了一个位置(slot). 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程.因为每个进程结束的时候,