Поделиться через


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

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

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

Замечание

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

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

  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 .
Не используйте настольный компьютер, измените маршрутизатор Является обязательным для приложений отладчика, чтобы избежать взаимоблокировок диалоговых окон при отладке процесса проводника 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

Типы файлов

Как работают ассоциации файлов

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

Проверка типа файла

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

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

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

Ассоциативные массивы