在Windows服务中启动另一个Windows服务
本人负责一个E卡通项目(也就手机终端,实现小额消费、考勤、停车、安防等应用的集成)的运维。最近,发现后台WIN服务(作用是采集刷卡设备内的刷卡数据)莫名其妙地被停止。查看Windows日志与后台WIN服务日志均未发现异常。无奈之下创建一个用于监控所有后台服务的监控服务。监控服务自动扫描后台服务,一旦发现后台服务处于停止状态,就马上自动启动被停止的服务。
1、代码实现:
//配置文件中指定需监控的服务名
NameValueCollection msSection = ConfigurationManager.GetSection("MonitorServices") as NameValueCollection;
ServiceController[] scServices;
scServices = ServiceController.GetServices();//检索本地计算机上的所有服务(设备驱动程序服务除外)。
foreach (ServiceController scTemp in scServices)
{
for (int index = 0; index < msSection.Count; index++)
{
string key = msSection.Keys[index];
if (scTemp.ServiceName == msSection[key] )
{
if (scTemp.Status == ServiceControllerStatus.Stopped)
{
logger.Debug(string.Format("扫描到{0}服务已停止;尝试启动服务", scTemp.ServiceName));
//注意:发布时,设置参数允许服务与桌面程序交与
TimeSpan ts = new TimeSpan(0, 0, 30);
scTemp.Start();
scTemp.WaitForStatus(ServiceControllerStatus.Running, ts);//等待服务达到指定状态或等待指定的超时过期。
scTemp.Refresh();
logger.Debug(string.Format("尝试启动服务后,扫描到{0}服务的运行状态:{1}", scTemp.ServiceName, scTemp.Status));
}
else
{
logger.Debug(string.Format("扫描到{0}服务正在运行", scTemp.ServiceName));
}
}
}
}
2、部署后台服务:
发布部署时,在“允许服务与桌面交互”处打勾。


浙公网安备 33010602011771号