private static IEnumerable <ApplicationUninstallerEntry> GetUpdates()
        {
            if (!HelperIsAvailable)
            {
                yield break;
            }

            var output = FactoryTools.StartProcessAndReadOutput(HelperPath, "list");

            if (string.IsNullOrEmpty(output) || output.Trim().StartsWith("Error", StringComparison.OrdinalIgnoreCase))
            {
                yield break;
            }

            foreach (var group in FactoryTools.ExtractAppDataSetsFromHelperOutput(output))
            {
                var entry = new ApplicationUninstallerEntry
                {
                    UninstallerKind = UninstallerType.WindowsUpdate,
                    IsUpdate        = true,
                    Publisher       = "Microsoft Corporation"
                };
                foreach (var valuePair in group)
                {
                    switch (valuePair.Key)
                    {
                    case "UpdateID":
                        entry.RatingId = valuePair.Value;
                        if (GuidTools.TryExtractGuid(valuePair.Value, out var result))
                        {
                            entry.BundleProviderKey = result;
                        }
                        break;

                    case "RevisionNumber":
                        entry.DisplayVersion = ApplicationEntryTools.CleanupDisplayVersion(valuePair.Value);
                        break;

                    case "Title":
                        entry.RawDisplayName = valuePair.Value;
                        break;

                    case "IsUninstallable":
                        if (bool.TryParse(valuePair.Value, out var isUnins))
                        {
                            entry.IsProtected = !isUnins;
                        }
                        break;

                    case "SupportUrl":
                        entry.AboutUrl = valuePair.Value;
                        break;

                    case "MinDownloadSize":
                        if (long.TryParse(valuePair.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var size))
                        {
                            entry.EstimatedSize = FileSize.FromBytes(size);
                        }
                        break;

                    case "MaxDownloadSize":
                        break;

                    case "LastDeploymentChangeTime":
                        if (DateTime.TryParse(valuePair.Value, CultureInfo.InvariantCulture, DateTimeStyles.None, out var date) &&
                            !DateTime.MinValue.Equals(date))
                        {
                            entry.InstallDate = date;
                        }
                        break;

                    default:
                        Debug.Fail("Unknown label");
                        break;
                    }
                }

                entry.UninstallString      = $"\"{HelperPath}\" uninstall {entry.RatingId}";
                entry.QuietUninstallString = entry.UninstallString;

                yield return(entry);
            }
        }
        public override void OnLoadRes()
        {
            base.OnLoadRes();

            GUIFrame frame = GuidNewModule.Instance.GetFrameByResName(frameName);

            if (frame == null)
            {
                return;
            }
            Transform tran = frame.FrameRootTransform.Find(itemName);

            if (tran == null)
            {
                return;
            }
            if (this.m_tick)
            {
                GuidNewModule.Instance.RemoveFunction(this);
            }
            //Vector4 m_tempVec = new Vector4(Screen);
            //GameEvents.UI_Guid_Event.OnReflashCircleMask.SafeInvoke(tempVec, 1);
            GameEvents.UI_Guid_Event.OnMaskClick += OnMaskClick;
            RectTransform srcRect = tran.GetComponent <RectTransform>();
            Action        act     = () => {
                if (this.m_isClearing)
                {
                    return;
                }
                Vector2[] cornPos = GuidTools.getCornPos(srcRect, this.lessPixel);
                GameEvents.UI_Guid_Event.OnShowMask.SafeInvoke(new List <Vector2[]> {
                    cornPos
                }, new List <MaskEmptyType> {
                    emptyType
                }, animType, eventName, isScene == 2);
                if (this.m_rotation >= 0)
                {
                    GUIFrame guidFrame = GuidNewModule.Instance.GetFrameByResName(UIDefine.UI_GUID);
                    if (guidFrame != null)
                    {
                        Vector2[] emptyPos = GuidNewTools.GetEmptyPos(cornPos, guidFrame.FrameRootTransform);
                        //Vector2 center = new Vector2((emptyPos[2].x + cornPos[0].x) / 2f, (cornPos[1].y + cornPos[0].y) / 2f);
                        GameEvents.UI_Guid_Event.OnLoadEffect.SafeInvoke(20000, "UI_xinshouyindao_shou.prefab", emptyPos[0], Vector2.one, m_rotation);
                    }
                }
            };

            if (srcRect.sizeDelta.x > 0)
            {
                if (this.delayTimeTT > 0)
                {
                    TimeModule.Instance.SetTimeout(act, this.delayTimeTT);
                }
                else
                {
                    act();
                }
            }
            else
            {
                TimeModule.Instance.SetTimeout(act, 0.8f);
                Debug.Log("mask time out === ");
            }
        }