Все это объяснено в официальной документации здесь: Guidelines for File Associations and Default Programs
Чтобы запустить эту ОС Windows предоставленный пользовательский интерфейс, вы можете использовать интерфейс IApplicationAssociationRegistrationUI.
Вот пример консольного приложения, которые демонстрируют это для вымышленного приложения «MyApp»:
class Program
{
static void Main(string[] args)
{
IApplicationAssociationRegistrationUI app = (IApplicationAssociationRegistrationUI)new ApplicationAssociationRegistrationUI();
int hr = app.LaunchAdvancedAssociationUI("MyApp");
Exception error = Marshal.GetExceptionForHR(hr);
if (error != null)
{
Console.WriteLine("Error: " + error.Message);
}
}
}
[Guid("1f76a169-f994-40ac-8fc8-0959e8874710")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IApplicationAssociationRegistrationUI
{
[PreserveSig]
int LaunchAdvancedAssociationUI([MarshalAs(UnmanagedType.LPWStr)] string pszAppRegName);
}
[ComImport]
[Guid("1968106d-f3b5-44cf-890e-116fcb9ecef1")]
public class ApplicationAssociationRegistrationUI
{
}
И это еще не закончена :-) Это работает только, если реестр правильно настроен для этого «MyApp» приложение, которое является своеобразной трудной частью. Вот самые простые шаги, необходимые для этой работы:
1) создать фиктивное "MyAppHTML" ProgID в HKCR, как это:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\MyAppHTML]
@="MyApp HTML Document"
[HKEY_CLASSES_ROOT\MyAppHTML\Application]
"ApplicationCompany"="Fictional Software Inc."
[HKEY_CLASSES_ROOT\MyAppHTML\shell]
@="open"
[HKEY_CLASSES_ROOT\MyAppHTML\shell\open]
[HKEY_CLASSES_ROOT\MyAppHTML\shell\open\command]
@="\"C:\\the app path\\testassoc.exe\""
2) объявить вымышленное приложение "MyApp" (я предлагаю HKCU , но это может быть HKLM), от компании вымышленного «FictionalSoftware», как это, например, с двумя ассоциациями файлов:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\FictionalSoftware]
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp]
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities]
"ApplicationDescription"="My Fictional Application"
[HKEY_CURRENT_USER\Software\FictionalSoftware\MyApp\Capabilities\FileAssociations]
".htm"="MyAppHTML"
".html"="MyAppHTML"
3) зарегистрировать это приложение для Windows (опять же, HKCU может быть заменен HKLM) , например:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\RegisteredApplications]
"MyApp"="Software\\FictionalSoftware\\MyApp\\Capabilities"
Если у вас возникли ошибки при запуске примера приложения, вы, вероятно, испортили макет реестра. Если вы получили это нормально, то вы должны увидеть что-то вроде этого:
Попробуйте это: http://www.howtogeek.com/howto/windows-vista/what-is-rundll32exe-and-why -is-it-running/ –
Вы спрашиваете, как предложить свою программу в качестве возможного по умолчанию для этих расширений или как запустить графический интерфейс, чтобы пользователь мог выбрать значения по умолчанию? –
Да, я хочу предложить свою программу как возможную по умолчанию для некоторых расширений. Я читал о настройке реестра.Он работает для меня в Windows XP и 7, но, похоже, он больше не работает в Windows 8.1, так как Windows использует хэш для проверки при изменении ассоциации программ по умолчанию. – Sakura