usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Diagnostics;usingSystem.Linq;usingSystem.ServiceProcess;usingSystem.Text;usingSystem.Management;usingSystem.Diagnostics;usingSystem.ServiceProcess;usingSystem.Configuration;namespaceIISWatcher
{public partial classIISWatcher : ServiceBase
{publicIISWatcher()
{
InitializeComponent();
}
System.Timers.Timer tmr;protected override void OnStart(string[] args)
{
tmr= newSystem.Timers.Timer();
tmr.Interval= 6000;
tmr.Elapsed+= newSystem.Timers.ElapsedEventHandler(tmr_Elapsed);
tmr.Enabled= true;
}void tmr_Elapsed(objectsender, System.Timers.ElapsedEventArgs e)
{string currentAnonymousUsers = "";string timeOut = "";try{
currentAnonymousUsers= ConfigurationManager.AppSettings["CurrentAnonymousUsers"];
timeOut= ConfigurationManager.AppSettings["TimeOut"];
ServiceController winSc= new ServiceController("WAS");if (winSc.Status != System.ServiceProcess.ServiceControllerStatus.Running && winSc.Status !=System.ServiceProcess.ServiceControllerStatus.StartPending)
{
StartService("WAS");
}
ServiceController sc= new ServiceController("W3SVC");if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Running && sc.Status !=System.ServiceProcess.ServiceControllerStatus.StartPending)
{
StartService("W3SVC");
}else{
SelectQuery query= new SelectQuery("Select" + currentAnonymousUsers + "from Win32_PerfRawData_W3SVC_WebService where name=\"_total\"");
ManagementObjectSearcher searcher= newManagementObjectSearcher(query);int currentAnonUsers = 0;foreach (ManagementBaseObject disk insearcher.Get())
{int.TryParse(disk[currentAnonymousUsers].ToString(), outcurrentAnonUsers);
}if (currentAnonUsers >Convert.ToInt32(timeOut))
{
StartService("W3SVC");
}
}
}catch(Exception ex)
{
EventLog.WriteEntry("IISWatcherRecord", "ErrorMessage:" +ex.Message, EventLogEntryType.Error);
}
}static private void StartService(stringserviceName)
{
ServiceController sc= newServiceController(serviceName);
sc.Start();for (int i = 0; i < 5; i++)
{
sc.Refresh();
System.Threading.Thread.Sleep(1000);if (sc.Status ==System.ServiceProcess.ServiceControllerStatus.Running)
{break;
}if (i == 4)
{throw new Exception(serviceName + "启动失败!启动时间超过5秒!");
}
}
}protected override voidOnStop()
{
tmr.Stop();
}
}
}