结束进程(C#)

 

最近用C#写一个监护进程的工具

1.停止进程的时候用Process的Kill方法,发现杀不掉用户名为SYSTEM的进程。

2.用WMI杀进程,但是发现可以停止用户名为SYSTEM的进程,而其他用户名的进程却停止不了。

3.最后用API下的TerminateProcess的方法,发现可以强制停止所有类型的进程。

/*111111111111111111111111111111111111111111111111111111111111111111111111*/

   Process[] thisProc = Process.GetProcessesByName ( procName ) ;

     if ( thisProc.Length > 0 )

     {

      for ( int i = 0; i < thisProc.Length; i++ )

      {

       if ( thisProc[i].CloseMainWindow() )

       {

        thisProc[i].Kill () ;

       }

      }

/*2222222222222222222222222222222222222222222222222222222222222222222222222*/

try

    {

     ManagementObject service = new ManagementObject ( "Win32_Service=\"procName\"" ) ;

     InvokeMethodOptions options = new InvokeMethodOptions () ;

     options.Timeout = new TimeSpan ( 0, 0, 0, 5 ) ;

     ManagementBaseObject outParams = service.InvokeMethod ( "StopService", null, options ) ;

     Console.WriteLine ( "Return Status = " + outParams["Returnvalue"] ) ;

    }

    catch ( ManagementException e )

    {
    
     Console.WriteLine ( e.StackTrace ) ;

    }

/*333333333333333333333333333333333333333333333333333333333333333333333333*/

[System.Security.SuppressUnmanagedCodeSecurity]
   [DllImport("kernel32")]      
   public static extern long TerminateProcess ( int handle, int exitCode ) ;

   public void KillProc ( string procName )

   {

    try
   
    {


        Process[] thisProc = Process.GetProcessesByName ( procName ) ;

        TerminateProcess ( int.Parse( thisProc[0].Handle.ToString() ), 0 ) ;

    }

    catch ( System.Exception e )
   
    {

     Console.WriteLine("kill process {0} faild", procName);
    
    }
    
   }

/*********************************************************************************************************/

你可能感兴趣的:(结束进程(C#))