public static bool IsNeedToUpdateByComparePackages(Package Local, Package Remote)
 {
     if ((Local.Name).Equals(Remote.Name))
         if ((Local.Version).CompareTo(Remote.Version) < 0)
             return true;
     return false;
 }
        public static List<Package> ReadXML(String filename)
        {
            List<Package> Packages = new List<Package>();

            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(filename);

            foreach (XmlNode Node_Lv1 in xmldoc.DocumentElement.ChildNodes)
            {
                switch (Node_Lv1.Name)
                {
                    // =============================
                    case "update":
                        foreach (XmlAttribute Attr in Node_Lv1.Attributes)
                        {
                            switch (Attr.Name)
                            {
                                // ---------------------
                                case "base":
                                    Package.UpdateServer = Attr.Value;
                                    break;
                                // ---------------------
                            }
                        }
                        break;
                    // =============================
                    case "package":
                        Package This = new Package();
                        foreach (XmlAttribute Attr in Node_Lv1.Attributes)
                        {
                            switch (Attr.Name)
                            {
                                // ---------------------
                                case "name":
                                    This.Name = Attr.Value;
                                    break;
                                // ---------------------
                                case "version":
                                    This.Version = Attr.Value;
                                    break;
                                // ---------------------
                            }
                        }
                        foreach (XmlNode Node_Lv2 in Node_Lv1.ChildNodes)
                        {
                            switch (Node_Lv2.Name)
                            {
                                // ---------------------
                                //case "product":
                                //    foreach (XmlAttribute Attr in Node_Lv2.Attributes)
                                //    {
                                //        switch (Attr.Name)
                                //        {
                                //            // .............
                                //            case "code":
                                //                This.ProductCode = Attr.Value;
                                //                break;
                                //            // .............
                                //        }
                                //    }
                                //    break;
                                // ---------------------
                                case "run":
                                    This.toRun = true;
                                    foreach (XmlNode Node_Lv3 in Node_Lv2.ChildNodes)
                                    {
                                        switch (Node_Lv3.Name)
                                        {
                                            // .............
                                            case "as":
                                                This.RunAs = Node_Lv3.InnerText;
                                                break;
                                            // .............
                                            case "once":
                                                This.RunOnce = true;
                                                break;
                                            // .............
                                        }
                                    }
                                    break;
                                // ---------------------
                                //case "dependent":
                                //    foreach (XmlAttribute Attr in Node_Lv2.Attributes)
                                //    {
                                //        switch (Attr.Name)
                                //        {
                                //            // .............
                                //            case "name":
                                //                This.Dependents.Add(Attr.Value);
                                //                break;
                                //            // .............
                                //        }
                                //    }
                                //    break;
                                // ---------------------
                            }
                        }
                        Packages.Add(This);
                        break;
                    // =============================
                }
            }
            return Packages;
        }