保证依赖的服务已全部启动
Posted yyjackma
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保证依赖的服务已全部启动相关的知识,希望对你有一定的参考价值。
1.功能介绍:
保证配置文件中,设置的服务已全部启动;未启动的服务,以异常日志的形式记录。
2.设计思路:
Step1:配置文件设置需要默认启动的服务名称
Step2:声明一个服务类对象sc,并从配置文件中的文件名读取出来放于数组depenentServiceArray当中
Step3:遍历服务名称集合。若服务未启动,则启动该服务,并记录日志;若服务异常,则记录服务异常日志
Step4:判断服务是否全部启动。若没有全部启动,则线程休眠规定时间,再次循环,直到服务成功启动;若完成启动,则退出
3.代码片段:
public class ServiceProcessorUtil { public static void CheckDependentServiceAndWait() { string dependentServices = ConfigurationManager.AppSettings["DependentServices"]; //从配置文件读取依赖服务集 if (!string.IsNullOrEmpty(dependentServices)) { bool success; System.ServiceProcess.ServiceController sc; string[] depenentServiceArray = dependentServices.Split(new char[] { ‘,‘ }, StringSplitOptions.RemoveEmptyEntries); while (true) { success = true; foreach (string serviceName in depenentServiceArray) //遍历依赖的服务集 { sc = new System.ServiceProcess.ServiceController(serviceName); //初始化计算机上与服务有关的类 if (sc != null) { try { if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Running) { sc.Start(); //ExceptionUtil:异常处理公共方法 ExceptionUtil.WriteLog(new Exception("依赖的服务:" + serviceName + "不存在或未正常运行")); success = false; break; } } catch { ExceptionUtil.WriteLog(new Exception("依赖的服务:" + serviceName + "未正常运行")); success = false; break; } } else { ExceptionUtil.WriteLog(new Exception("依赖的服务:" + serviceName + "不存在")); success = false; break; } sc.Close(); sc.Dispose(); } if (success) { break; } else { Thread.Sleep(Convert.ToInt16(ConfigurationManage.AppSettings["ThreadSleepTime"]) * 1000); } } } } }
以上是关于保证依赖的服务已全部启动的主要内容,如果未能解决你的问题,请参考以下文章