/// <summary>
/// Retrieves a list of file associations and programmatic identifiers the registry.
/// </summary>
private static (ComparableTuple <string>[] fileAssocs, string[] progIDs) GetFileAssocData()
{
var fileAssocsList = new List <ComparableTuple <string> >();
var progIDsList = new List <string>();
foreach (string keyName in Registry.ClassesRoot.GetSubKeyNames())
{
if (keyName.StartsWith("."))
{
using var assocKey = Registry.ClassesRoot.OpenSubKey(keyName);
// Get the main ProgID
string assocValue = assocKey?.GetValue("")?.ToString();
if (string.IsNullOrEmpty(assocValue))
{
continue;
}
fileAssocsList.Add(new ComparableTuple <string>(keyName, assocValue));
// Get additional ProgIDs
fileAssocsList.AddRange(RegUtils.GetValueNames(assocKey, FileType.RegSubKeyOpenWith).Select(progID => new ComparableTuple <string>(keyName, progID)));
}
else
{
progIDsList.Add(keyName);
}
}
return(fileAssocsList.ToArray(), progIDsList.ToArray());
}