public static string GetFileAssociationForExtension(string extension)
{
uint capacity = 0;
var emptyString = String.Empty;
const uint errorCodeNoAssociation = 0x80070483;
const uint verify = 0x40;
const uint exeName = 2;
extension = extension.Trim();
if (String.IsNullOrEmpty(extension))
{
return emptyString;
}
if (extension[0] != '.')
{
extension = "." + extension;
}
var ret1 = AssocQueryString(verify, exeName, extension, null, null, ref capacity);
var sb = new StringBuilder((int)capacity);
var ret2 = AssocQueryString(verify, exeName, extension, null, sb, ref capacity);
if (ret1 == errorCodeNoAssociation || ret2 == errorCodeNoAssociation)
{
return emptyString;
}
try
{
var file = Path.GetFileName(sb.ToString());
if (String.Compare(file, "shell32.dll", true) == 0)
{
return emptyString;
}
}
catch (Exception)
{
return emptyString;
}
return sb.ToString();
}