예제 #1
0
        static bool ManageServices(List <string> configs, ServiceControllerStatus desiredStatus, int timeout)
        {
            bool ok = false;

            try
            {
                if (configs?.Count > 0)
                {
                    foreach (string config in configs)
                    {
                        SynapseServerConfig c = SynapseServerConfig.Deserialize(config);
                        string service        = c.Service.Name;

                        ServiceController sc = new ServiceController(service);
                        LogMessage($"[{service}] service status is [{sc.Status}].");

                        bool working = false;
                        if (desiredStatus == ServiceControllerStatus.Stopped)
                        {
                            if (!((sc.Status.Equals(ServiceControllerStatus.StopPending)) || (sc.Status.Equals(ServiceControllerStatus.Stopped))))
                            {
                                working = true;
                                LogMessage($"Stopping [{service}] service...");
                                sc.Stop();
                            }
                        }
                        else
                        {
                            if (!((sc.Status.Equals(ServiceControllerStatus.StartPending)) || (sc.Status.Equals(ServiceControllerStatus.Running))))
                            {
                                working = true;
                                LogMessage($"Starting [{service}] service...");
                                sc.Start();
                            }
                        }

                        if (working)
                        {
                            sc.WaitForStatus(desiredStatus, new TimeSpan(0, 0, 0, 0, timeout));
                            LogMessage($"[{service}] service status is [{sc.Status}].");
                        }
                    }
                }

                ok = true;
            }
            catch (Exception ex)
            {
                LogMessage(ex.Message);

                if (desiredStatus == ServiceControllerStatus.Stopped)
                {
                    ManageServices(configs, ServiceControllerStatus.Running, timeout);
                }
            }

            return(ok);
        }
        public static SynapseServerConfig Deserialize(string fileName)
        {
            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException($"Could not find {fileName}");
            }

            SynapseServerConfig ssc = null;

            using (StreamReader reader = new StreamReader(fileName))
                ssc = new DeserializerBuilder().IgnoreUnmatchedProperties().Build().Deserialize <SynapseServerConfig>(reader);
            return(ssc);
        }