c#如何启动/干掉/查找 进程

简介: 查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :  using System;using System.Diagnostics;using System.

查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 : 

using  System;
using  System.Diagnostics;
using  System.Windows.Forms;

namespace  ProcessDemo
{
    
public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
        }

        
private   void  Form1_Load( object  sender, EventArgs e)
        {
            
this .linkLabel1.Links.Add( 0 , linkLabel1.Text.Length,  " http://yjmyzz.cnblogs.com/ " );
        }

        
private   void  linkLabel1_LinkClicked( object  sender, LinkLabelLinkClickedEventArgs e)
        {
            
this .linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited  =   true ;
            
string  target  =  e.Link.LinkData  as   string ;
            
if  (target  !=   null   &&  target.StartsWith( " http:// " ))
            {
                Process.Start(target);
            }            
        }

        
///   <summary>
        
///  列出所有可访问进程
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  btnList_Click( object  sender, EventArgs e)
        {
            Process[] processes;
            processes 
=  Process.GetProcesses();
            
string  str  =   "" ;
            
foreach  (Process p  in  processes)
            {
                
try
                {
                    str 
=  p.ProcessName;
                    
this .lst1.Items.Add( " 名称: "   +  p.ProcessName  +   " ,启动时间: "   +  p.StartTime.ToShortTimeString()  +   " ,进程ID: "   +  p.Id.ToString() );
                }
                
catch  (Exception ex)
                {
                    
this .lst1.Items.Add(ex.Message.ToString()); // 某些系统进程禁止访问,所以要加异常处理
                }
            }

        }

        
private   void  btnFind_Click( object  sender, EventArgs e)
        {
            txtFind.Text 
=  txtFind.Text.Trim().ToLower();
            
if  (txtFind.Text.Length  >   0
            {
                Process[] arrP 
=  Process.GetProcesses();
                
foreach  (Process p  in  arrP)
                {
                    
try
                    {
                        
if  (p.ProcessName.ToLower()  ==  txtFind.Text)
                        {
                            MessageBox.Show(txtFind.Text 
+   "  找到了,PID为  "   +  p.Id.ToString());
                            
return ;
                        }
                    }
                    
catch  { }
                }

                MessageBox.Show(
" 未找到该进程,请检查输入! " );
            }
        }

        
private   void  btnKill_Click( object  sender, EventArgs e)
        {
            txtFind.Text 
=  txtFind.Text.Trim().ToLower();
            
int  pid  =   - 1 ;
            
if  (txtFind.Text.Length  >   0 )
            {
                Process[] arrP 
=  Process.GetProcesses();
                
foreach  (Process p  in  arrP)
                {
                    
try
                    {
                        
if  (p.ProcessName.ToLower()  ==  txtFind.Text)
                        {
                            pid 
=  p.Id;
                            
break ;
                        }
                    }
                    
catch  { }
                }

                
if  (pid  !=   - 1
                {
                    RunCmd(
" ntsd -c q -p  "   +  pid);
                }
               
            }
        }


        
///   <summary>    
        
///  运行DOS命令   
        
///  DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID   
        
///   </summary>    
        
///   <param name="command"></param>    
        
///   <returns></returns>    
         public   string  RunCmd( string  command)
        {
            
            Process p 
=   new  Process();

           

            p.StartInfo.FileName 
=   " cmd.exe " ;           
            p.StartInfo.Arguments 
=   " /c  "   +  command;    
            p.StartInfo.UseShellExecute 
=   false ;       
            p.StartInfo.RedirectStandardInput 
=   true ;   
            p.StartInfo.RedirectStandardOutput 
=   true ;  
            p.StartInfo.RedirectStandardError 
=   true ;  
            p.StartInfo.CreateNoWindow 
=   true ;          

            p.Start();            

            
return  p.StandardOutput.ReadToEnd();        

        }  

    }
}

另外ntsd.exe在windows vista以上的版本(包括windows 2008)上,出于安全考虑已经被MS给去掉了,但我们可以直接从xp下复制过来继续使用,这里为方便大家给出ntsd.exe的下载

http://files.cnblogs.com/yjmyzz/ntsd.rar

 

 

 

目录
相关文章
|
1月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
59 0
|
2月前
|
SQL 网络协议 数据库连接
已解决:连接SqlServer出现 provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程【C#连接SqlServer踩坑记录】
本文介绍了解决连接SqlServer时出现“provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程”错误的步骤,包括更改服务器验证模式、修改sa用户设置、启用TCP/IP协议,以及检查数据库连接语句中的实例名是否正确。此外,还解释了实例名mssqlserver和sqlserver之间的区别,包括它们在默认设置、功能和用途上的差异。
|
4月前
|
C#
C#进程调用FFmpeg操作音视频
因为公司需要对音视频做一些操作,比如说对系统用户的发音和背景视频进行合成,以及对多个音视频之间进行合成,还有就是在指定的源背景音频中按照对应的规则在视频的多少秒钟内插入一段客户发音等一些复杂的音视频操作。本篇文章主要讲解的是使用C#进程(Process)调用FFmpeg.exe进行视频合并、音频合并、音频与视频合并成视频这几个简单的音视频操作。
|
C# 开发者
C# 开发者技术:进程间数据共享之管道(Pipes)-异步通信版
主要类 1.NamedPipeClientStream 2.NamedPipeServerStream 解释:命名管道是一种进程间通信的方式,它允许不同进程之间在同一台机器上进行通信
919 2
C# 开发者技术:进程间数据共享之管道(Pipes)-异步通信版
C#开发:执行进程等待
C#开发:执行进程等待
255 0
|
编解码 Linux C#
C#进程调用FFmpeg操作音视频
C#进程调用FFmpeg操作音视频
230 0
|
调度 C#
C#编程:进程与线程
C#编程:进程与线程
|
API C# Windows
C#多线程(4):进程同步Mutex类
C#多线程(4):进程同步Mutex类
259 0
C#多线程(4):进程同步Mutex类