private void FindJunkRecursively(ICollection <RegistryJunkNode> returnList, string softwareKey, int level)
        {
            try
            {
                string[] names;
                using (var key = RegistryTools.OpenRegistryKey(softwareKey))
                {
                    names = key.GetSubKeyNames();
                }

                foreach (var name in names)
                {
                    if (KeyBlacklist.Any(y => y.Equals(name)))
                    {
                        continue;
                    }

                    var generatedConfidence = GenerateConfidence(name, softwareKey, level, false);
                    var confidenceParts     = generatedConfidence as IList <ConfidencePart> ?? generatedConfidence.ToList();

                    if (confidenceParts.Any())
                    {
                        var newNode = new RegistryJunkNode(softwareKey, name, Uninstaller.DisplayName);
                        newNode.Confidence.AddRange(confidenceParts);
                        returnList.Add(newNode);
                    }
                    else if (level <= 1)
                    {
                        FindJunkRecursively(returnList, Path.Combine(softwareKey, name), level + 1);
                    }
                }
            }
            // Reg key invalid
            catch (ArgumentException)
            {
            }
            catch (SecurityException)
            {
            }
            catch (ObjectDisposedException)
            {
            }
        }
        public override IEnumerable <JunkNode> FindJunk()
        {
            var softwareKeys = GetSoftwareRegKeys(Uninstaller.Is64Bit);
            var returnList   = new List <RegistryJunkNode>();

            foreach (var softwareKey in softwareKeys)
            {
                FindJunkRecursively(returnList, softwareKey, 0);
            }

            if (Uninstaller.RegKeyStillExists())
            {
                var regKeyNode = new RegistryJunkNode(PathTools.GetDirectory(Uninstaller.RegistryPath),
                                                      Uninstaller.RegistryKeyName, Uninstaller.DisplayName);
                regKeyNode.Confidence.Add(ConfidencePart.IsUninstallerRegistryKey);
                returnList.Add(regKeyNode);
            }

            return(returnList.Cast <JunkNode>());
        }