Как определить приложения, связанные с конкретным расширением (например, .JPG), а затем определить, где находится исполняемый файл этого приложения, чтобы его можно было запустить с помощью вызова, чтобы сказать System.Diagnostics.Process.Start (...).
Я уже умею читать и писать в реестр. Это структура реестра, которая затрудняет определение стандартным способом, какие приложения связаны с расширением, какие у них отображаемые имена и где расположены их исполняемые файлы.





Ассоциации типов файлов хранятся в реестре Windows, поэтому вы должны иметь возможность использовать Microsoft.Win32.Registry класс, чтобы читать, какое приложение зарегистрировано для какого формата файла.
Вот две статьи, которые могут быть полезны:
Образец кода:
using System;
using Microsoft.Win32;
namespace GetAssociatedApp
{
class Program
{
static void Main(string[] args)
{
const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}";
const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command";
// 1. Find out document type name for .jpeg files
const string ext = ".jpeg";
var extPath = string.Format(extPathTemplate, ext);
var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string;
if (!string.IsNullOrEmpty(docName))
{
// 2. Find out which command is associated with our extension
var associatedCmdPath = string.Format(cmdPathTemplate, docName);
var associatedCmd =
Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string;
if (!string.IsNullOrEmpty(associatedCmd))
{
Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext);
}
}
}
}
}
@aku: Не забывайте HKEY_CLASSES_ROOT \ SystemFileAssociations \
Не уверен, представлены ли они в .NET, но есть COM-интерфейсы (IQueryAssociations и друзья), которые справляются с этим, поэтому вам не нужно копаться в реестре и надеяться, что в следующей версии Windows ничего не изменится.
Как сказал Андерс, рекомендуется использовать COM-интерфейс IQueryAssociations. Вот образец с pinvoke.net
Приведенная ссылка предназначена для AssocCreate. Ссылка на AssocQuery такая: pinvoke.net/default.aspx/shlwapi.AssocQueryString
Также HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \
.EXT \ OpenWithList ключ для списка "Ширина открытия ..." (строковые значения 'a', 'b', 'c', 'd' и т. д. Для выбора)
.EXT \ UserChoice ключ для «Всегда использовать выбранную программу для открытия этого типа файла» (строковое значение «Progid»)
Все значения являются ключами, используемыми так же, как docName в приведенном выше примере.
Лучше использовать IQueryAssociations