Регистрация приложения
В этом разделе рассматривается, как приложения могут предоставлять сведения о себе, необходимые для реализации определенных сценариев. Сюда входят сведения, необходимые для поиска приложения, команды, поддерживаемые приложением, и типы файлов, которые может обрабатывать приложение.
Этот раздел организован следующим образом:
- Поиск исполняемого файла приложения
- Регистрация приложений
- Регистрация глаголов и других сведений о сопоставлении файлов
- Регистрация воспринимаемого типа
- Связанные темы
Примечание
Приложения также можно зарегистрировать на панели управления Set Program Access and Computer Defaults (SPAD) и Set Your Default Programs (SYDP). Сведения о регистрации приложений SPAD и SYDP см. в разделах Рекомендации по сопоставлениям файлов и программам по умолчанию и Настройка доступа к программам и компьютеру по умолчанию (SPAD).
Поиск исполняемого файла приложения
Если функция ShellExecuteEx вызывается с именем исполняемого файла в параметре lpFile , существует несколько мест, где функция ищет файл. Рекомендуется зарегистрировать приложение в подразделе реестра Пути к приложениям . Это позволяет избежать необходимости для приложений изменять системную переменную среды PATH.
Файл ищется в следующих расположениях:
- текущий рабочий каталог.
- Только каталог Windows (поиск подкаталогов не выполняется).
- Каталог Windows\System32 .
- Каталоги, перечисленные в переменной среды PATH.
- Рекомендуется: HKEY_LOCAL_MACHINE\software\Microsoft\Windows\CurrentVersion\App Paths
Регистрация приложений
Подразделы реестра "Пути к приложениям" и "Приложения" используются для регистрации и управления поведением системы от имени приложений. Подраздел Пути к приложениям является предпочтительным расположением.
Использование подраздела "Пути к приложениям"
В Windows 7 и более поздних версиях настоятельно рекомендуется устанавливать приложения для каждого пользователя, а не для компьютера. Приложение, установленное для каждого пользователя, можно зарегистрировать в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths. Приложение, установленное для всех пользователей компьютера, можно зарегистрировать в разделе HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths.
Записи, найденные в разделе Пути к приложениям , используются в основном для следующих целей:
- Сопоставление имени исполняемого файла приложения с полным путем к нему.
- Предварительное добавление сведений в переменную среды PATH для каждого приложения или процесса.
Если имя подраздела Пути к приложению совпадает с именем файла, оболочка выполняет два действия:
- Запись (по умолчанию) используется в качестве полного пути к файлу.
- Запись Path для этого подраздела предварительно добавлена в переменную среды PATH этого процесса. Если это не требуется, значение Path можно опустить.
Потенциальные проблемы, о которых следует знать, включают:
- Оболочка ограничивает длину командной строки MAX_PATH * 2 символами. Если в качестве записей реестра указано много файлов или их пути длинные, имена файлов в списке могут быть потеряны из-за усечения командной строки.
- Некоторые приложения не принимают несколько имен файлов в командной строке.
- Некоторые приложения, принимаюющие несколько имен файлов, не распознают формат, в котором их предоставляет оболочка. Оболочка предоставляет список параметров в виде строки в кавычках, но для некоторых приложений могут потребоваться строки без кавычек.
- Не все элементы, которые можно перетаскивать, являются частью файловой системы; например, принтеры. У этих элементов нет стандартного пути Win32, поэтому невозможно предоставить значимое значение lpParametersдля ShellExecuteEx.
Использование записи DropTarget позволяет избежать этих потенциальных проблем, предоставляя доступ ко всем форматам буфера обмена, включая CFSTR_SHELLIDLIST (для длинных списков файлов) и CFSTR_FILECONTENTS (для объектов, не относящихся к файловой системе).
Чтобы зарегистрировать и контролировать поведение приложений с помощью подраздела Пути к приложениям:
Добавьте подраздел с тем же именем, что и исполняемый файл, в подраздел Пути к приложениям , как показано в следующей записи реестра.
HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER SOFTWARE Microsoft Windows CurrentVersion App Paths file.exe (Default) DontUseDesktopChangeRouter DropTarget Path UseUrl
Дополнительные сведения о записях подраздела Пути к приложениям см. в следующей таблице.
Параметр реестра | Сведения |
---|---|
(по умолчанию) | Полный путь к приложению. Имя приложения, указанное в записи (по умолчанию), можно указать с расширением .exe или без нее. При необходимости функция ShellExecuteEx добавляет расширение при поиске подраздела Пути к приложениям . Запись имеет тип REG_SZ . |
DontUseDesktopChangeRouter | Является обязательным для приложений отладчика, чтобы избежать взаимоблокировок диалоговых окон файлов при отладке процесса windows Обозреватель. Однако настройка записи DontUseDesktopChangeRouter немного снижает эффективность обработки уведомлений об изменениях. Запись имеет тип REG_DWORD , а значение — 0x1. |
DropTarget | Идентификатор класса (CLSID). Запись DropTarget содержит ИДЕНТИФИКАТОР CLSID объекта (обычно локального сервера, а не внутрипроцессного сервера), реализующего IDropTarget. По умолчанию, когда целевым объектом удаления является исполняемый файл и значение DropTarget не указано, оболочка преобразует список удаленных файлов в параметр командной строки и передает его в ShellExecuteEx через lpParameters. |
Путь | Предоставляет строку (в виде разделенного точками с запятой списка каталогов) для добавления к переменной среды PATH при запуске приложения путем вызова ShellExecuteEx. Это полный путь к .exe. Это REG_SZ. В Windows 7 и более поздних версиях тип может быть REG_EXPAND_SZ и обычно REG_EXPAND_SZ %ProgramFiles%.
Примечание: Помимо записей (по умолчанию), Path и DropTarget, распознаваемых оболочкой, приложение также может добавлять пользовательские значения в подраздел Пути к приложениям исполняемого файла. Мы рекомендуем разработчикам приложений использовать подраздел Пути приложений , чтобы предоставить путь к конкретному приложению, а не добавлять его в глобальный системный путь. |
SupportedProtocols | Создает строку, содержащую схемы протоколов URL-адресов для заданного ключа. Он может содержать несколько значений реестра, указывающих, какие схемы поддерживаются. Эта строка соответствует формату scheme1:scheme2. Если этот список не пуст, в строку будет добавлен файл : . Этот протокол неявно поддерживается при определении SupportedProtocols . |
UseUrl | Указывает, что приложение может принимать URL-адрес (вместо имени файла) в командной строке. Приложения, которые могут открывать документы непосредственно из Интернета, например веб-браузеры и проигрыватели мультимедиа, должны задать эту запись. Если функция ShellExecuteEx запускает приложение и значение UseUrl=1 не задано, ShellExecuteEx загружает документ в локальный файл и вызывает обработчик для локальной копии. Например, если приложение имеет этот набор записей и пользователь щелкает правой кнопкой мыши файл, хранящийся на веб-сервере, команда Open станет доступной. В противном случае пользователю придется скачать файл и открыть локальную копию. Запись UseUrl имеет REG_DWORD тип, а значение — 0x1. В Windows Vista и более ранних версиях эта запись указывала, что URL-адрес должен передаваться приложению вместе с локальным именем файла при вызове через ShellExecuteEx. В Windows 7 это означает, что приложение может понимать любой URL-адрес HTTP или HTTPS, передаваемый ему, без необходимости указывать имя файла кэша. Этот раздел реестра связан с разделом SupportedProtocols . |
Использование подраздела "Приложения"
Благодаря включению записей реестра в подраздел HKEY_CLASSES_ROOT\Приложения\ApplicationName.exe приложения могут предоставлять сведения, относящиеся к конкретному приложению, как показано в следующей таблице.
Параметр реестра | Описание |
---|---|
shell\verb | Предоставляет метод глагола для вызова приложения из OpenWith. Без указанного здесь определения команды система предполагает, что приложение поддерживает CreateProcess, и передает имя файла в командной строке. Эта функция применяется ко всем методам глаголов, включая DropTarget, ExecuteCommand и Динамический обмен данными (DDE). |
DefaultIcon | Позволяет приложению предоставить определенный значок для представления приложения вместо первого значка, хранящегося в .exe файле. |
FriendlyAppName | Предоставляет способ получения локализуемого имени, отображаемого для приложения, а не только сведений о версии, которые могут быть не локализуемыми. Запрос сопоставления ASSOCSTR считывает это значение записи реестра и возвращается, чтобы использовать имя FileDescription в сведениях о версии. Если это имя отсутствует, запрос на связь по умолчанию использует отображаемое имя файла. Приложения должны использовать ASSOCSTR_FRIENDLYAPPNAME для получения этих сведений, чтобы получить правильное поведение. |
SupportedTypes | Список типов файлов, поддерживаемых приложением. Это позволит отобразить приложение в каскадном меню диалогового окна Открыть с помощью. |
NoOpenWith | Указывает, что для открытия файлов этого типа не указано приложение. Имейте в виду, что если подраздел OpenWithProgIDs задан для приложения по типу файла, а сам подраздел ProgID также не имеет записи NoOpenWith, это приложение будет отображаться в списке рекомендуемых или доступных приложений, даже если в нем указана запись NoOpenWith. Дополнительные сведения см. в разделах How to Include an Application in the Open With Dialog Box и How to exclude an Application from the Open with Dialog Box. |
IsHostApp | Указывает, что процесс является ведущим процессом, например Rundll32.exe или Dllhost.exe, и его не следует рассматривать для закрепления меню "Пуск" или включения в список наиболее часто используемых (MFU). При запуске с ярлыком, содержащим список аргументов, отличный от NULL, или явные идентификаторы модели пользователя приложения (AppUserModelIDs), процесс можно закрепить (в качестве этого ярлыка). Такие сочетания клавиш являются кандидатами для включения в список MFU. |
NoStartPage | Указывает, что исполняемый файл приложения и ярлыки должны быть исключены из меню "Пуск" , а также закрепление или включение в список MFU. Эта запись обычно используется для исключения системных средств, установщиков и средств удаления, а также файлов сведений. |
UseExecutableForTaskbarGroupIcon | Заставляет панель задач использовать значок этого исполняемого файла по умолчанию, если для этого приложения нет закрепляемого ярлыка, а вместо значка окна, которое было впервые обнаружено. |
TaskbarGroupIcon | Указывает значок, используемый для переопределения значка панели задач. Значок окна обычно используется для панели задач. Если задать запись TaskbarGroupIcon, система будет использовать для приложения значок из .exe. |
Примеры
Ниже приведены некоторые примеры регистрации приложений с помощью подраздела HKEY_CLASSES_ROOT\Applications\ApplicationName.exe . Все значения записей реестра имеют REG_SZ тип, за исключением DefaultIcon , который имеет REG_EXPAND_SZ тип.
HKEY_CLASSES_ROOT
Applications
wordpad.exe
FriendlyAppName = @%SystemRoot%\System32\shell32.dll,-22069
HKEY_CLASSES_ROOT
Applications
wmplayer.exe
SupportedTypes
.3gp2
HKEY_CLASSES_ROOT
Applications
wmplayer.exe
DefaultIcon
(Default) = %SystemRoot%\system32\wmploc.dll,-730
HKEY_CLASSES_ROOT
Applications
WScript.exe
NoOpenWith
HKEY_CLASSES_ROOT
Applications
photoviewer.dll
shell
open
DropTarget
Clsid = {FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}
HKEY_CLASSES_ROOT
Applications
mspaint.exe
SupportedTypes
.bmp
.dib
.rle
.jpg
.jpeg
.jpe
.jfif
.gif
.emf
.wmf
.tif
.tiff
.png
.ico
Регистрация глаголов и других сведений о сопоставлении файлов
Подразделы, зарегистрированные в HKEY_CLASSES_ROOT\SystemFileAssociations , позволяют оболочке определять поведение атрибутов по умолчанию для типов файлов и включать сопоставления общих файлов. Когда пользователи изменяют приложение по умолчанию для типа файла, ProgID нового приложения по умолчанию имеет приоритет при предоставлении команд и других сведений о связи. Этот приоритет обусловлен тем, что он является первой записью в массиве сопоставлений. Если программа по умолчанию изменена, сведения, указанные в предыдущем ProgID, больше не будут доступны.
Чтобы заблаговременно справляться с последствиями изменения программ по умолчанию, можно использовать HKEY_CLASSES_ROOT\SystemFileAssociations для регистрации глаголов и других сведений о связи. Из-за расположения после ProgID в массиве сопоставлений эти регистрации имеют более низкий приоритет. Эти системы SystemFileAssociationsregistrations являются стабильными, даже если пользователи изменяют программы по умолчанию и предоставляют расположение для регистрации дополнительных команд, которые всегда будут доступны для определенного типа файлов. Пример реестра см. в разделе Регистрация воспринимаемого типа далее в этом разделе.
В следующем примере реестра показано, что происходит, когда пользователь запускает элемент Программы по умолчанию в панель управления изменить значение по умолчанию для .mp3 файлов на App2ProgID. После изменения значения по умолчанию Verb1 больше недоступен, а Verb2 становится значением по умолчанию.
HKEY_CLASSES_ROOT
.mp3
(Default) = App1ProgID
HKEY_CLASSES_ROOT
App1ProgID
shell
Verb1
HKEY_CLASSES_ROOT
App2ProgID
shell
Verb2
Регистрация воспринимаемого типа
Значения реестра для воспринимаемых типов определяются как подразделы подраздела реестра HKEY_CLASSES_ROOT\SystemFileAssociations . Например, воспринимаемый текст типа регистрируется следующим образом:
HKEY_CLASSES_ROOT
SystemFileAssociations
text
shell
edit
command
(Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
open
command
(Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
Предполагаемый тип файла указывается путем включения значения PerceivedType в подраздел типа файла. В качестве значения PerceivedType задается имя воспринимаемого типа, зарегистрированного в подразделе реестра HKEY_CLASSES_ROOT\SystemFileAssociations , как показано в предыдущем примере реестра. Например, чтобы объявить CPP-файлы как файлы воспринимаемого типа "text", добавьте следующую запись реестра:
HKEY_CLASSES_ROOT
.cpp
PerceivedType = text