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); }