在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、部署后台服务:

   发布部署时,在“允许服务与桌面交互”处打勾。

 

 

posted @ 2011-02-27 11:19  apcard  阅读(656)  评论(0)    收藏  举报