2015-04-24 2 views
4

Я хочу показать Set program associations окна [редактировать: для моей программы] как Chrome сделать, когда запустить его в первый раз после установки, как это:Как показать окно «Установить ассоциации программ» в Windows 8/8.1?

                        enter image description here

Имеет:

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

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

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

+0

Попробуйте это: http://www.howtogeek.com/howto/windows-vista/what-is-rundll32exe-and-why -is-it-running/ –

+1

Вы спрашиваете, как предложить свою программу в качестве возможного по умолчанию для этих расширений или как запустить графический интерфейс, чтобы пользователь мог выбрать значения по умолчанию? –

+0

Да, я хочу предложить свою программу как возможную по умолчанию для некоторых расширений. Я читал о настройке реестра.Он работает для меня в Windows XP и 7, но, похоже, он больше не работает в Windows 8.1, так как Windows использует хэш для проверки при изменении ассоциации программ по умолчанию. – Sakura

ответ

6

Все это объяснено в официальной документации здесь: 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" 

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

enter image description here

Смежные вопросы