Регистрация приложения

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

Этот раздел организован следующим образом:

Примечание

Приложения также можно зарегистрировать на панели управления 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 (для объектов, не относящихся к файловой системе).

Чтобы зарегистрировать и контролировать поведение приложений с помощью подраздела Пути к приложениям:

  1. Добавьте подраздел с тем же именем, что и исполняемый файл, в подраздел Пути к приложениям , как показано в следующей записи реестра.

    HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
       SOFTWARE
          Microsoft
             Windows
                CurrentVersion
                   App Paths
                      file.exe
                         (Default)
                         DontUseDesktopChangeRouter
                         DropTarget
                         Path
                         UseUrl
    
  2. Дополнительные сведения о записях подраздела Пути к приложениям см. в следующей таблице.

Параметр реестра Сведения
(по умолчанию) Полный путь к приложению. Имя приложения, указанное в записи (по умолчанию), можно указать с расширением .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

Типы файлов

Принцип работы сопоставлений файлов

Просмотр содержимого по типу или типу файла

Средство проверки типов файлов

Обработчики типов файлов

Программные идентификаторы

Воспринимаемые типы

Массивы ассоциаций