c # — Как показать & quot; Установить ассоциации программ & quot; окно в Windows 8 / 8.1?

Я хочу показать Set program associations окна [редактировать: для моей программы] как это делает Chrome при первом запуске после установки, вот так:

                        введите описание изображения здесь

Это имеет:

  • Название моей программы
  • Типы файлов, которые я хочу установить по умолчанию (более одного)

Как это сделать с помощью c # (или win32 c ++)?

редактировать
Я прочитал несколько статей об изменении реестра (с помощью файла .reg или работы с кодом для изменения реестра), чтобы установить программу по умолчанию. Кажется, это работает только в Windows XP / 7 или ниже, а не 8 / 8.1, так как Microsoft использует хеш для защиты этого реестра.

4

Решение

Это все объясняется в официальной документации здесь: Рекомендации по сопоставлению файлов и программ по умолчанию

Чтобы запустить этот пользовательский интерфейс 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» -прогид в 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"

Если вы получаете ошибки при запуске примера приложения, то вы, вероятно, испортили структуру реестра. Если у вас все в порядке, вы должны увидеть что-то вроде этого:

введите описание изображения здесь

6

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector