我写了一个杀QQ的服务,当服务启动的时候创建一个线程,线程监视是否有QQ或QQ相关的进程,发现有就结束它!但是程序中出了点问题,仅在手动点服务中的启动时才可以杀掉进程!大家帮我看看出错在那里?
结束QQ或相关进程的方法
==========================================================
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading ;
using System.Configuration;namespace killQQ
{
public class Service1 : System.ServiceProcess.ServiceBase
{
private System.Diagnostics.EventLog eventLog1;
/// <summary> 
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private Thread KillQQThread;
public Service1()
{
// 该调用是 Windows.Forms 组件设计器所必需的。
InitializeComponent();
// TODO: 在 InitComponent 调用后添加任何初始化
if(!EventLog.SourceExists ("NewSource"))
{
EventLog.CreateEventSource ("NewSource","NewLog",".");                
}
this.eventLog1 .Source ="NewSource";
this.eventLog1 .Log ="NewLog";
} // 进程的主入口点
static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;

// 同一进程中可以运行多个用户服务。若要将
//另一个服务添加到此进程,请更改下行
// 以创建另一个服务对象。例如,
//
//   ServicesToRun = New System.ServiceProcess.ServiceBase[] {new Service1(), new MySecondUserService()};
//
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun);
} /// <summary> 
/// 设计器支持所需的方法 - 不要使用代码编辑器 
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.eventLog1 = new System.Diagnostics.EventLog();
((System.ComponentModel.ISupportInitialize)(this.eventLog1)).BeginInit();
// 
// Service1
// 
this.CanPauseAndContinue = true;
this.ServiceName = "Service1";
((System.ComponentModel.ISupportInitialize)(this.eventLog1)).EndInit(); } /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null) 
{
components.Dispose();
}
}
base.Dispose( disposing );
} /// <summary>
/// 设置具体的操作,以便服务可以执行它的工作。
/// </summary>
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
try
{
KillQQThread=new Thread (new ThreadStart (KillQQ));
KillQQThread.Start ();
}
catch(Exception err)
{
this.eventLog1 .WriteEntry ("启动杀QQ线程失败!"+err.Message );
}
}
 
/// <summary>
/// 停止此服务。
/// </summary>
/// 
protected override void OnPause()
{
try
{
KillQQThread.Suspend ();
}
catch(Exception err)
{
this.eventLog1 .WriteEntry ("线程挂起异常!"+err.Message );
}
}
protected override void OnContinue()
{
try
{
KillQQThread.Resume ();
}
catch(Exception err)
{
this.eventLog1 .WriteEntry ("线程继续执行时异常!"+err.Message );
}
} protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
try
{
KillQQThread.Join ();
}
catch(Exception err)
{
this.eventLog1 .WriteEntry ("线程停止异常!"+err.Message );
}
}
protected void KillQQ()
{
string[] AboutQQ={"QQMusic","QQGame","QQ","TIMPlatform","QQTV","QQLive"};                           //定义要结束的进程名。
Process[] ProcessInfo=Process.GetProcesses();                     //获得系统运行的进程。
foreach(Process AllProcessInfo in ProcessInfo)
{
foreach(string str in AboutQQ)
{
try
{
if(str==AllProcessInfo.ProcessName )
{
AllProcessInfo.EnableRaisingEvents =true;
AllProcessInfo.Kill ();                        //比较进程,发现有QQ相关的进程,消灭!!!
}
else
{
//No operation,continue program!
}
}
catch(Exception err)
{
                        this.eventLog1 .WriteEntry ("服务未能结束相关进程!"+err.Message );
}
}
}
}
}

}