private static void CollectProtocolAssocsEx([NotNull] RegistryKey capsKey, [NotNull] CommandMapper commandMapper, [NotNull] CapabilityList capabilities)
{
#region Sanity checks
if (capsKey == null) throw new ArgumentNullException(nameof(capsKey));
if (commandMapper == null) throw new ArgumentNullException(nameof(commandMapper));
if (capabilities == null) throw new ArgumentNullException(nameof(capabilities));
#endregion
using (var urlAssocKey = capsKey.OpenSubKey(DesktopIntegration.Windows.AppRegistration.RegSubKeyUrlAssocs))
{
if (urlAssocKey == null) return;
foreach (string protocol in urlAssocKey.GetValueNames())
{
string progID = urlAssocKey.GetValue(protocol, "").ToString();
using (var progIDKey = Registry.ClassesRoot.OpenSubKey(progID))
{
if (progIDKey == null) continue;
var prefix = new KnownProtocolPrefix {Value = protocol};
var existing = capabilities.GetCapability<UrlProtocol>(progID);
if (existing == null)
{
var capability = new UrlProtocol
{
ID = progID,
Descriptions = {progIDKey.GetValue("", "").ToString()},
KnownPrefixes = {prefix}
};
capability.Verbs.AddRange(GetVerbs(progIDKey, commandMapper));
capabilities.Entries.Add(capability);
}
else existing.KnownPrefixes.Add(prefix);
}
}
}
}
#endregion