Описание установки программ по умолчанию из MSDN:
Многие приложения, например, браузеры и клиенты электронной почты, связаны с файлами и протоколами, незнакомыми конечным пользователям. В качестве примера можно назвать протоколы HTTP:\ и Mailto:\. При запуске эти приложения обычно проверяют, являются ли они программами по умолчанию. Для этого они должны использовать новый набор API модуля "Программы по умолчанию". Если приложение не является программой по умолчанию, оно должно выводить диалоговое окно со следующими вариантами выбора:
Оставить все без изменения.
Сделать это приложение программой по умолчанию.
В приложениях также должна быть по умолчанию включенная опция вывода предупреждения "Сообщать мне, когда <приложение> перестает быть программой по умолчанию". Приложения НЕ должны устанавливаться как программы по умолчанию без подтверждения пользователя. Это правило должно реализовываться посредством вызова прикладных интерфейсов API модуля "Программы по умолчанию" для восстановления всех зарегистрированных связей приложения.
Пример - Internet Explorer:
Регистрация в модуле "Программы по умолчанию"
Модуль "Программы по умолчанию" прямо регистрирует каждое предложение для всех файлов и протоколов, к которым оно хочет быть привязано, как программа по умолчанию. Это выполняется посредством регистрации в HKLM следующей схемы. Обратите внимание, что ApplicationDescription может представлять собой как строку, так и ссылку на ресурс. Последний вариант поддерживает MUI.
Код:
HKLM\%APPLICATIONCAPABILITYPATH%
ApplicationDescription = REG_EXPAND_SZ "@path\to\dll.dll,-resourceId"
ApplicationName = REG_EXPAND "@path\to\dll.dll,-resourceId"
\FileAssociations
.file-extension = REG_SZ "file-extension-progid"
\UrlAssociations
url-scheme = REG_SZ "url-scheme-progid"
\MIMEAssociations
MIME = REG_SZ "mime-progrid"
\Startmenu REG_SZ
StartmenuInternet ="%app Name%"
Mail ="%App Name%"
Примечание
Это указатели приложений, зарегистрировавшихся как программы по умолчанию в разделе HKLM\software\clients. Это значение должно быть именем ключа в разделе реестра HKLM\software\clients\StartmenuInternet или HKLM\software\clients\Mail.
HKLM\Software\RegisteredApplications
unique-app-name = REG_SZ "%APPLICATIONCAPABILITYPATH%"
Примечание
Требуется указать параметр ApplicationDescription. Параметр ApplicationName является дополнительным. Он позволяет приложениям разного типа указывать на один и тот же исполняемый файл, выводя при этом разные имена.
Примечание
Для того, чтобы адрес URL показывался в пользовательском интерфейсе, приложение должно встраивать адрес URL в сертификате аутентификации с цифровой подписью. Приложения без подписи не могут отображать адрес URL.
Пример использования веб-обозревателя Contoso:
Примечание
Для обеспечения возможности локализации это должен быть файл DLL.
Код:
HKLM\software\Contoso\WebBrowser\Capabilities
Description =" The award-winning Web browser is better than ever.
Search the internet in second and find anything you want. Use
integrated tabs and new phishing detectors to enhance your internet experience."
\FileAssociations
.htm = ContosoHTML
.html = ContosoHTML
.shtml = ContosoHTML
.xht = ContosoHTML
.xhtml = ContosoHTML
\UrlAssociations
http = Contoso.Url.Http
https = Contoso.Url.Https
ftp = Contoso.Url.ftp
\Startmenu
StartmenuInternet = "Contoso.exe"
HKLM\software\RegisteredApplications
Contoso.WebBrowser.1.06 = software\Contoso\WebBrowser\Capabilities
Идентификаторы ProgId
Приложения должны иметь идентификаторы ProgId. Эти идентификаторы должны содержать всю информацию, записываемую в ключ по умолчанию. Приложения могут привязывать идентификатор progid к одному или нескольким протоколам/расширениям файлов. Оба варианта работают одинаково. В примере выше ContosoHTML указывает на один идентификатор progid, имеющий информацию shellexecute для файлов с расширением htm, html, shtml, xht и xhtml. При работе с протоколами определяется отдельный идентификатор progid для каждого протокола. В связи с этим строки исполнения для разных протоколов различаются.
При определении идентификатора ProgID для MIME, в этот идентификатор следует включить подключ CLSID с идентификатором класса для соответствующего приложения. Он используется для сверки с идентификатором класса в базе данных MIME, хранящемся в HKLM.
Определения значений
Capabilities – Вложенный ключ реестра, в котором содержится вся информация модуля "Программы по умолчанию" для определенного приложения. Вложенный ключ capabilities всегда находится на более низком уровне, чем ключи реестра приложений.
Description – Модуль "Программы по умолчанию" разработан так, чтобы пользователи могли свободно делать выбор на основании имеющейся информации. Мы позволяем всем приложениям регистрировать строки описаний, чтобы каждое приложение могло сообщать пользователю о своих возможностях. Это значение является свойством в ключе \capabilities.
Примечание
Это поле обязательно. Приложение должно содержать здесь запись, которая будет отображаться в пользовательском интерфейсе. Обязательно локализуйте соответствующие строки.
ApplicationName – Указывает имя приложения, которое отображается в пользовательском интерфейсе модуля "Программы по умолчанию". Если это поле не заполнено, модуль "Программы по умолчанию" использует имя исполняемого файла, связанного с первым зарегистрированным идентификатором progid для данного приложения. Значение имени ApplicationName всегда должно соответствовать значению имени RegisteredApplications.
FileAssocations – В этом вложенном ключе перечисляются все типы файлов, к которым данное приложение хочет быть привязано, как приложение по умолчанию. Каждая привязка сохраняется как свойство вложенного ключа FileAssocations. Каждому расширению должен соответствовать идентификатор progid для определенного приложения, а не общий идентификатор progid.
UrlAssocaitions – В этом вложенном ключе перечисляются все типы URL, к которым данное приложение хочет быть привязано, как приложение по умолчанию. Каждая привязка сохраняется как свойство вложенного ключа UrlAssocations. Каждому протоколу должен соответствовать идентификатор progid для определенного приложения, а не общий идентификатор progid.
MIMEAssocaitions – В этом вложенном ключе перечисляются все MIME, к которым данное приложение хочет быть привязано, как приложение по умолчанию. Каждая привязка сохраняется как свойство вложенного ключа MIMEAssocations. Указанное имя MIME должно точно соответствовать имени, хранящемуся в базе данных MIME. Значение должно представлять собой идентификатор progid для определенного приложения, содержащий в себе идентификатор CLSID.
Startmenu – Вложенный ключ startmenu предназначается для команд меню "Пуск" для работы с Интернетом и электронной почтой. Приложения, регистрирующиеся как претенденты на привязку к этим командам, могут указывать соответствующие связи в записи модуля "Программы по умолчанию" в реестре. Регистрация в меню "Пуск" позволяет приложению показать, что оно хочет, чтобы соответствующая ссылка отображалась в записи модуля "Программы по умолчанию" для электронной почты или Интернета. Если эта информация указана, и пользователь делает приложение программой по умолчанию, данное приложение также связывается с меню "Пуск". Регистрация заключается во включении имени зарегистрированного ключа в раздел
Код:
HKLM\software\clients\StartMenuInternet или HKLM\software\clients\Mail.
При привязке к почтовому клиенту этот ключ также определяет почтовый клиент MAPI, используемый по умолчанию.