Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается, как приложения могут предоставлять сведения о себе, необходимые для включения определенных сценариев. Сюда входят сведения, необходимые для поиска приложения, команды, поддерживаемые приложением, и типы файлов, которые может обрабатывать приложение.
Этот раздел организован следующим образом:
- Поиск исполняемого файла приложения
- Регистрация приложений
- Регистрация глаголов и другой информации о файловых ассоциациях
- Регистрация воспринимаемого типа
- Связанные статьи
Замечание
Приложения также могут быть зарегистрированы в приложениях панели управления "Установка доступа к программам и параметров по умолчанию" (SPAD) и "Установка программ по умолчанию" (SYDP). Сведения о регистрации приложений SPAD и SYDP см. в Руководства по сопоставлению файлов и программам по умолчанию, а также в Настройка доступа к программам и параметрам компьютера по умолчанию (SPAD).
Поиск исполняемого файла приложения
При вызове функции ShellExecuteEx с именем исполняемого файла в параметре lpFile есть несколько мест, где функция ищет файл. Рекомендуем зарегистрировать ваше приложение в подразделе реестра App Paths. Это позволяет избежать необходимости в приложениях изменять переменную среды system PATH.
Файл ищется в следующих расположениях:
- Текущий рабочий каталог.
- Каталог Windows только (не выполняется поиск подкаталогов).
- Каталог Windows\System32 .
- Каталоги, перечисленные в переменной среды PATH.
- Рекомендуется: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
Регистрация приложений
Подразделы реестра App Paths и Applications используются для регистрации и управления поведением системы от имени приложений. Подраздел Пути приложений — это предпочтительное расположение.
Использование подраздела "Пути к приложению"
В Windows 7 и более поздних версиях настоятельно рекомендуется устанавливать приложения на пользователя, а не на компьютер. Приложение, установленное для каждого пользователя, можно зарегистрировать в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths. Приложение, установленное для всех пользователей компьютера, может быть зарегистрировано в ключе реестра HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths.
Записи, найденные в разделе "Пути приложений" , используются в первую очередь для следующих целей:
- Чтобы сопоставить имя исполняемого файла приложения с его полностью квалифицированным путем.
- Чтобы добавить информацию в начало переменной окружения PATH для каждого приложения и каждого процесса.
Если имя подраздела App Paths совпадает с именем файла, то Shell выполняет два действия:
- Запись по умолчанию используется в качестве полного пути к файлу.
- Запись Path для этого подраздела предварительно задается в переменную среды PATH этого процесса. Если в этом нет необходимости, значение пути может быть опущено.
Потенциальные проблемы, которые следует учитывать, включают:
- Длина Shell командной строки ограничивается MAX_PATH * 2 символов. Если перечислено много файлов в записях реестра или их пути слишком длинные, имена файлов, указанных позже в списке, могут быть потеряны, так как командная строка обрезается.
- Некоторые приложения не принимают несколько имен файлов в командной строке.
- Некоторые приложения, принимаюющие несколько имен файлов, не распознают формат, в котором Shell они предоставляются. Shell предоставляет список параметров в виде строки в кавычках, но некоторые приложения могут требовать строки без кавычек.
- Не все элементы, которые можно перетаскивать, являются частью файловой системы; например, принтеры. Эти элементы не имеют стандартного пути 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 . |
Не используйте настольный компьютер, измените маршрутизатор | Является обязательным для приложений отладчика, чтобы избежать взаимоблокировок диалоговых окон при отладке процесса проводника Windows. Настройка записи DontUseDesktopChangeRouter, однако, приводит к немного менее эффективной обработке уведомлений об изменениях. Запись имеет тип REG_DWORD , а значение — 0x1. |
DropTarget | Является идентификатором класса (CLSID). Запись DropTarget содержит CLSID объекта (обычно локального сервера, а не внутрипроцессного сервера), реализующего IDropTarget. По умолчанию, когда целевой объект удаления является исполняемым файлом, и значение DropTarget не предоставляется, Shell список удаленных файлов преобразуется в параметр командной строки и передает его в ShellExecuteExecuteEx через lpParameters. |
Путь | Предоставляет строку (в виде разделенного точкой с запятой списка каталогов) для добавления в переменную среды PATH при запуске приложения путем вызова ShellExecuteExecuteEx. Это абсолютный путь к .exe. Это тип REG_SZ. В Windows 7 и более поздних версиях тип может быть REG_EXPAND_SZ, и обычно — REG_EXPAND_SZ %ProgramFiles%.
Заметка: Помимо записей (Default), Path и DropTarget, которые распознаются Shell, приложение также может добавлять пользовательские значения в подпункт App Paths своего исполняемого файла. Мы рекомендуем разработчикам программных приложений использовать подраздел "Пути приложений" для предоставления пути, специфичного для приложения, вместо добавления его в глобальный системный путь. |
Поддерживаемыеprotocols | Создает строку, содержащую схемы протокола URL для заданного ключа. Это может содержать несколько значений реестра, чтобы указать, какие схемы поддерживаются. Эта строка соответствует формату scheme1:scheme2. Если этот список не пуст, файл: будет добавлен в строку. Этот протокол неявно поддерживается при определении SupportedProtocols . |
UseUrl | Указывает, что приложение может принять URL-адрес (вместо имени файла) в командной строке. Приложения, которые могут открывать документы непосредственно из Интернета, таких как веб-браузеры и проигрыватели мультимедиа, должны задать эту запись. Если функция ShellExecuteEx запускает приложение, а значение UseUrl=1 не задано, ShellExecuteEx загружает документ в локальный файл и вызывает обработчик локальной копии. Например, если в приложении установлен этот параметр, и пользователь щелкает правой кнопкой мыши на файле, хранящемся на веб-сервере, станет доступна команда «Открыть» verb. В противном случае пользователю потребуется скачать файл и открыть локальную копию. Запись UseUrl имеет тип REG_DWORD , а значение 0x1. В Windows Vista и более ранних версиях эта запись указывает, что URL-адрес должен передаваться приложению вместе с именем локального файла при вызове через ShellExecuteExecuteEx. В Windows 7 приложение может понять любой URL-адрес http или https, передаваемый в него, не предоставляя имя файла кэша. Этот ключ реестра связан с ключом SupportedProtocols. |
Использование подраздела "Приложения"
Благодаря включению записей реестра в подраздел HKEY_CLASSES_ROOT\Applications\ApplicationName.exe, приложения могут предоставлять специфичную для приложения информацию, представленную в следующей таблице.
Запись в реестре | Описание |
---|---|
shell\verb | verb Предоставляет метод вызова приложения из OpenWith. Без определения, указанного verb здесь, система предполагает, что приложение поддерживает CreateProcess и передает имя файла в командной строке. Эта функция применяется ко всем verb методам, включая DropTarget, ExecuteCommand и Dynamic Data Exchange (DDE). |
Иконка по умолчанию | Позволяет приложению предоставить определенный значок для представления приложения вместо первого значка, хранящегося в файле .exe. |
FriendlyAppName | Предоставляет способ получить локализуемое имя для отображения приложения вместо информации о версии, которая может не быть локализуемой. Запрос сопоставления ASSOCSTR считывает это значение записи реестра и возвращается к использованию имени FileDescription в сведениях о версии. Если это имя отсутствует, запрос ассоциации по умолчанию использует отображаемое имя файла. Приложения должны использовать ASSOCSTR_FRIENDLYAPPNAME для получения этих сведений для получения правильного поведения. |
Поддерживаемые Типы | Выводит список типов файлов, поддерживаемых приложением. Это позволяет приложению отображаться в каскадном меню диалогового окна "Открыть с помощью". |
NoOpenWith | Указывает, что приложение не указано для открытия этого типа файла. Помните, что если подраздел OpenWithProgIDs задан для приложения по типу файла, а подраздел ProgID сам по себе не имеет записи NoOpenWith, это приложение будет отображаться в списке рекомендуемых или доступных приложений, даже если для него указана запись NoOpenWith. Дополнительные сведения см. в разделе «Как включить приложение в диалоговое окно „Открыть с помощью“» и «Как исключить приложение из диалогового окна „Открыть с помощью“». |
IsHostApp | Указывает, что процесс является хост-процессом, например Rundll32.exe или Dllhost.exe, и не следует рассматривать для закрепления в меню Пуск или включения в список наиболее часто используемых (MFU). При запуске с ярлыком, содержащим список аргументов, отличный от NULL, или явным Application User Model IDs (AppUserModelIDs), процесс можно закрепить (как этот ярлык). Такие сочетания клавиш являются кандидатами на включение в список часто используемых функций (MFU). |
Без стартовой страницы | Указывает, что исполняемый файл приложения и ярлыки должны быть исключены из меню "Пуск" и не должны закрепляться или включаться в список наиболее часто используемых (MFU). Эта запись обычно используется для исключения системных средств, установщиков и средств удаления и файлов readme. |
Использовать_исполняемый_файл_для_значка_группы_панели_задач | Позволяет панели задач использовать значок по умолчанию этого исполняемого файла, если для этого приложения нет закрепленного ярлыка, а не значка окна, которое было обнаружено впервые. |
ИконкаГруппыНаПанелиЗадач | Указывает значок, используемый для замены значка панели задач. Значок окна обычно используется для панели задач. Установка параметра 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 , позволяют Shell определить поведение атрибутов по умолчанию для типов файлов и включить сопоставления общих файлов. Когда пользователи изменяют приложение по умолчанию для типа файла, progID нового приложения по умолчанию имеет приоритет в предоставлении команд и других сведений об ассоциации. Этот приоритет обусловлен тем, что он является первой записью в массиве ассоциаций. Если программа по умолчанию изменена, информация в предыдущем progID больше недоступна.
Для проактивного подхода к последствиям изменения программ по умолчанию можно использовать HKEY_CLASSES_ROOT\SystemFileAssociations для регистрации действий и других сведений об ассоциациях. Из-за их расположения после ProgID в массиве ассоциаций эти регистрации являются более низким приоритетом. Эти регистрации SystemFileAssociations остаются стабильными, даже когда пользователи изменяют программы по умолчанию, и предоставляют возможность зарегистрировать вторичные команды, которые всегда будут доступны для определенного типа файла. Пример реестра см. в разделе «Регистрация предполагаемого типа» позже в этом разделе.
В следующем примере реестра показано, что происходит, когда пользователь запускает элемент "Программы по умолчанию " на панели управления, чтобы изменить значение по умолчанию для .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 как файлы воспринимаемого типа текста, например, добавьте следующую запись в реестр:
HKEY_CLASSES_ROOT
.cpp
PerceivedType = text