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