diff --git a/ServiceManager/ServiceManager.cs b/ServiceManager/ServiceManager.cs index 6a613bb7e5..cd15722bc5 100644 --- a/ServiceManager/ServiceManager.cs +++ b/ServiceManager/ServiceManager.cs @@ -1,6 +1,8 @@ using System; using System.Threading; using System.ServiceProcess; +using System.Xml; +using System.IO; public class OpenGridMasterService : System.ServiceProcess.ServiceBase { @@ -21,11 +23,48 @@ public class OpenGridMasterService : System.ServiceProcess.ServiceBase { protected override void OnStart(string[] args) { - - + ServiceWorkerThread = new Thread(new ThreadStart(MainServiceThread)); + ServiceWorkerThread.Start(); + } + + protected override void OnStop() + { + ServiceWorkerThread.Abort(); + } + + private void MainServiceThread() + { + try { + StreamReader reader=new StreamReader("opengrid-master-cfg.xml"); + + string configxml = reader.ReadToEnd(); + XmlDocument doc = new XmlDocument(); + doc.LoadXml(configxml); + XmlNode rootnode = doc.FirstChild; + if (rootnode.Name != "regions") + { + EventLog.WriteEntry("ERROR! bad XML in opengrid-master-cfg.xml - expected regions tag"); + Console.WriteLine("Sorry, could not startup the service - please check your opengrid-master-cfg.xml file: missing regions tag"); + (new ServiceController("OpenGridServices-master")).Stop(); + } + + for(int i=0; i<=rootnode.ChildNodes.Count; i++) + { + if(rootnode.ChildNodes.Item(i).Name != "region") { + EventLog.WriteEntry("nonfatal error - unexpected tag inside regions block of opengrid-master-cfg.xml"); + (new ServiceController("OpenGridServices-master")).Stop(); + } + } + } catch(Exception e) { + Console.WriteLine(e.ToString()); + (new ServiceController("OpenGridServices-master")).Stop(); + } + } public static void Main() { + Console.WriteLine("Starting up OGS master service"); + ServiceBase.Run(new OpenGridMasterService()); } }