最近用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);
}
}
/*********************************************************************************************************/