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


Windows Search как платформа разработки

Чтобы индексировать содержимое и свойства новых форматов файлов и хранилищ данных, поиск Microsoft Windows должен быть расширен с помощью надстроек.

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

  • Реализуйте источник данных оболочки для расширения пространства имен оболочки.
  • Предоставление элементов в хранилище данных (если они добавляют новое хранилище данных, так как он должен быть индексирован).
  • Разработайте обработчик протокола, чтобы поиск Windows смог получить доступ к данным для индексирования.

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

Начало работы

Прежде чем приступить к созданию приложения для поиска Windows, помните, что предпочтительный способ сделать это можно с помощью источника данных оболочки. Источник данных Оболочки расширяет пространство имен оболочки и предоставляет элементы в хранилище данных. Затем элементы в хранилище данных можно индексировать системой поиска Windows с помощью обработчика протокола. Этот косвенный подход к доступу к поиску Windows путем реализации источника данных оболочки предпочтительнее, так как он предоставляет доступ к полным функциям оболочки. Это обеспечивает разумный пользовательский интерфейс.

Если вы хотите, чтобы результаты запроса отображались в проводнике Windows, необходимо реализовать источник данных оболочки, прежде чем создать обработчик протокола для расширения индекса. Однако если все запросы будут программными (например, с помощью OLE DB) и интерпретированы кодом приложения, а не оболочкой, пространство имен оболочки по-прежнему предпочтительнее, но не требуется.

Для получения знаний о содержимом файла, например элементов в базах данных или пользовательских типах файлов, требуется обработчик протокола. Хотя поиск Windows может индексировать имя и свойства файла, Windows не знает о содержимом файла. В результате такие элементы нельзя индексировать или предоставлять в оболочке Windows. Реализуя пользовательский обработчик протокола, вы можете предоставить эти элементы. Список обработчиков, определенных сценарием разработчика, который вы пытаетесь достичь, см. в разделе "Обзор обработчиков".

Обзор сценариев разработки поиска

Наиболее распространенными сценариями разработки в Поиске Windows являются:

Добавление нового хранилища данных

Требуется хранилище данных оболочки для поиска Windows, только если вы добавляете новое хранилище данных для индексирования. Хранилище данных — это репозиторий данных, которые можно предоставить модели программирования Shell в качестве контейнера с помощью источника данных Оболочки. Затем элементы в хранилище данных можно индексировать системой поиска Windows с помощью обработчика протокола. Обработчик протокола реализует протокол для доступа к источнику содержимого в собственном формате. Интерфейсы ISearchProtocol и ISearchProtocol2 используются для реализации пользовательского обработчика протокола для расширения источников данных, которые можно индексировать. Сведения о создании источника данных оболочки см. в разделе "Реализация базовых интерфейсов объектов папок".

Добавление нового формата файла

При добавлении нового настраиваемого формата файла необходимо разработать обработчик фильтра или обработчик свойств, но не оба. Фильтр — это реализация интерфейса IFilter. Он открывает файлы определенного типа файла, а также фильтрует свойства и фрагменты текста для индексатора. Фильтры связаны с типами файлов, как указано расширениями имени файла, типами MIME или идентификаторами классов (CLSID). Хотя один фильтр может обрабатывать несколько типов файлов, каждый тип файла работает только с одним фильтром.

Обработчик свойств преобразует данные, хранящиеся в файле, в структурированную схему, которая распознается и может получить доступ к проводнику Windows, поиску Windows и другим приложениям. Эти системы затем могут взаимодействовать с обработчиком свойств для записи и чтения свойств в файл и из нее. Преобразованные данные включают представление сведений, подсказки, область сведений, страницы свойств и т. д. Каждый обработчик свойств связан с определенным типом файла, идентифицируемым расширением имени файла. Для выполнения следующих действий требуется обработчик свойств:

  • Отображение свойств неиндексированного элемента в пользовательском интерфейсе.
  • Поддержка записи свойств.

Использование результатов поиска Windows

В следующих разделах описано несколько способов использования результатов поиска Windows.

Запрос данных

Разработчики, пишущие приложения на основе объединенной системы свойств Windows Search и Windows, могут получать доступ к файлам и элементам независимо от типа приложения или файла. Существует два способа доступа к данным индексатора приложений:

  • Приложения напрямую взаимодействуют с OLE DB, отправляя запросы язык SQL поиска Windows (SQL) поставщику OLE DB для поиска Windows, чтобы получить результаты. Запросы можно создавать вручную или с помощью интерфейса ISearchQueryHelper для создания SQL из ключевых слов поиска и расширенного синтаксиса запросов (AQS).
  • Приложения работают через слой оболочки. Преимущество слоя оболочки заключается в том, что он также поддерживает другие источники, такие как grep. Однако недостатком является то, что не все функции индексатора доступны.

Другим вариантом является использование протоколов search-ms:// и search://, которые выполняют поисковые запросы на основе URL-адресов, отображаемые в проводнике Windows. Этот параметр позволяет разрабатывать самый легкий вес, но не возвращает результаты или выбор пользователей из представления результатов в вызывающее приложение. Кроме того, как и другие протоколы, сторонние приложения поиска могут взять на себя протоколы search-ms:// и search://, если приложения соответствуют требуемому набору функций. Дополнительные сведения о запросе см. в разделе "Процесс запроса" в поиске Windows и программном запросе индекса.

В Windows 7 и более поздних версиях федеративный поиск предлагает новый поставщик поиска, который запрашивает удаленные хранилища данных через веб-серверы через протокол OpenSearch и перечисляет результаты в виде RSS или XML-каналов Atom. Соединители поиска — это соединения пространств имен, которые имитируют поведение папок с помощью поставщика поиска. Дополнительные сведения о федерации поиска для удаленных хранилищ данных в Windows 7 см. в разделе "Федеративный поиск" в Windows.

Индексирование файлов и элементов

Индексирование содержимого основано на типах файлов и данных, поддерживаемых надстройками, включенными в поиск Windows, и правилами включения и исключения по умолчанию для папок в файловой системе. Например, фильтры, включенные в службу поиска окон, поддерживают более 200 распространенных типов данных, включая документы Microsoft Office, электронную почту Microsoft Outlook (в сочетании с обработчиком протокола MAPI), обычные текстовые файлы, HTML и многое другое. Полный список типов файлов, поддерживаемых в собственном коде, см. в разделе "Что включается в индекс".

Индекс можно расширить с помощью обработчиков свойств и фильтров, чтобы предоставить содержимое и свойства новых форматов файлов индексу и проводнику Windows. Фильтры — это реализация интерфейса IFilter. Существует два типа фильтров: один, взаимодействующий с отдельными элементами, такими как файлы, и тот, который взаимодействует с контейнерами, такими как папки. Фильтры являются многоцелевой в том, что они поддерживают фрагментирование данных, текстовое содержимое, некоторые свойства и несколько языков.

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

Индексирование хранилища данных

Индекс можно расширить с помощью обработчиков протокола для предоставления доступа к закрытым хранилищам данных. Например, для файлов и элементов, содержащихся в хранилищах данных, не относящихся к файловой системе (например, базах данных и хранилищах электронной почты), требуется обработчик протокола для сопоставления с URL-адресом потока. Обработчики протоколов также могут при необходимости определить правильные фильтры, используемые для извлечения информации из потока. Фильтры перечисляют URL-адреса хранилища данных. Затем элементы индексируются по отдельности с помощью соответствующего обработчика фильтров и/или свойств. Дополнительные сведения см. в разделе "Расширение индекса".

Управление процессом индексирования

Разработчики приложений могут управлять областью и частотой индексирования поиска Windows с помощью различных интерфейсов управления. Эти интерфейсы включают функции для добавления и удаления каталогов, которые индексатор сканирует изменения, вручную уведомляет индекс изменений данных, проверяет состояние индексатора и принудительно переиндексирует некоторые или все данные. Дополнительные сведения см. в разделе "Управление индексом".

Интеграция системы свойств Windows с приложениями поиска Windows

Система свойств Windows — это расширяемая система определений данных для чтения и записи, которая обеспечивает универсальный способ выражения метаданных о элементах оболочки. Система свойств Windows в Windows Vista и более поздних версиях позволяет хранить и извлекать метаданные для элементов оболочки. Элемент оболочки — это любой отдельный фрагмент содержимого, например файл, папка, электронная почта или контакт. Свойство — это отдельный элемент метаданных, связанных с элементом оболочки. Значения свойств выражаются как структура PROPVARIANT.

Обширный список общих свойств включается для ряда распространенных типов элементов, таких как фотографии, музыка, документы, сообщения, контакты и файлы. Разработчики также могут представить собственные свойства платформы, если существующее свойство не соответствует их потребностям. Дополнительные сведения об интеграции приложений с системой свойств Windows см. в статье "Разработка обработчиков свойств".

Обзор обработчиков

Обработчик — это объект com-модели компонента, предоставляющий функциональные возможности для элемента оболочки. Большинство источников данных Оболочки предлагают расширяемую систему для обработчиков привязки к элементам. Например, папка файловой системы использует систему сопоставления для поиска обработчиков определенного типа файла. Для каждого типа файла требуется конкретный обработчик. Один обработчик фильтра необходим для типа файла Adobe Acrobat .pdf, например для формата файла .doc и т. д.

Разные обработчики имеют некоторую общность. В Windows Vista и более поздних версиях все обработчики должны использовать один из следующих интерфейсов для инициализации обработчика: IInitializeWithStream, IInitializeWithItem или IItinitializeWithFile.

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

Задача Обработчик Концептуальные сведения
Доступ к свойствам файла для индексирования Обработчик свойств Разработка обработчиков свойств
Системные свойства для пользовательских форматов файлов
Добавление форматов буфера обмена для объекта данных (IDataObject) элемента (объекты данных используются в сценариях перетаскивания и копирования и вставки). Обработчик объекта данных Создание обработчиков данных
Добавление команд для элемента, который обычно отображается в контекстном меню Обработчик контекстного меню Создание обработчиков контекстного меню
Настройка контекстного меню с помощью динамических команд
Связывание типа файла с определенным значком Обработчик значков Создание обработчиков значков
Создание листов свойств с рисунками пользовательского интерфейса и элементами управления, которые позволяют пользовательскому взаимодействию с типом файла Обработчик страницы свойств Обработчики листов свойств
Включение типа элемента для поддержки сценариев перетаскивания и копирования и вставки Обработчик удаления Передача объектов оболочки с помощью перетаскивания и буфера обмена
Извлечение фрагментов свойств текста и документа для индексирования Обработчик фильтра Разработка обработчиков фильтров
Индексирование нового типа файла Обработчик фильтров, обработчик свойств Разработка обработчиков фильтров
Разработка обработчиков свойств
Индексирование содержимого хранилища данных Обработчик протокола Разработка обработчиков протоколов
Просмотр упрощенного представления элемента оболочки в области предварительного просмотра проводника Windows Обработчик предварительного просмотра Обработчики предварительного просмотра
Предоставление всплывающего текста при наведении указателя мыши на объект пользовательского интерфейса Обработчик подсказок Создание обработчиков расширений оболочки (настройка Infotip)
Предоставление статического изображения для представления элемента оболочки Обработчик эскизов Обработчики эскизов

 

В следующей таблице перечислены обработчики и интерфейсы для реализации каждого типа обработчика.

Обработчик Интерфейсы
Обработчик удаления IDropTarget, IDropTargetHelper, IPersistFile, IShellExtInit
Обработчик объекта данных IDataObject, IPersistFile
Обработчик фильтра IFilter
Обработчик значков IExtractIcon
Необязательно: IPersist, IPersistFile
Обработчик подсказок IQueryInfo
Обработчик предварительного просмотра IPreviewHandler
Обработчик свойств IPropertyStore
Обработчик протокола IFilter, ISearchProtocol, IUrlAccessor
Необязательно: ISearchProtocol2, IUrlAccessor2, IUrlAccessor3, IUrlAccessor4
Обработчик страницы свойств IShellExtInit, IShellPropSheetExt
Обработчик контекстного меню IContextMenu, IExplorerCommand, IShellExtInit
Обработчик эскизов IThumbnailProvider

 

Примечание.

Обработчик свойств иногда кувен в качестве обработчика метаданных. Источник данных Оболочки иногда называется расширением пространства имен оболочки. Обработчик типов файлов иногда называется обработчиком расширений оболочки или расширением Оболочки.

 

Дополнительные сведения о создании обработчиков см. в разделе "Создание обработчиков расширений оболочки". Дополнительные сведения о свойствах см. в разделе "Система свойств Windows".

Рекомендации по установщику надстроек

При создании установщика надстройки используйте следующие рекомендации.

  • Установщик должен использовать установщик EXE или MSI.
  • Заметки о выпуске должны быть предоставлены.
  • Запись "Добавление и удаление программ" должна быть создана для каждой установленной надстройки.
  • Установщик должен взять на себя все параметры реестра для определенного типа файла или сохранить, что текущая надстройка понимает.
  • Если предыдущая надстройка перезаписывается, установщик должен уведомить пользователя.
  • Если более новая надстройка перезаписала предыдущую надстройку, пользователь должен восстановить функциональность предыдущей надстройки и снова сделать ее надстройкой по умолчанию для этого типа файла или хранилища.

Примечание для разработчиков

Перед созданием обработчика фильтров или свойств разработчикам следует учитывать следующее:

  • Эти обработчики являются встроенными расширениями, загруженными в процессы, которые не контролируются, например процесс управляющей программы фильтра, проводник Windows (grep search) и сторонние узлы, такие как Почта Windows.
  • Необходимо написать безопасный код, достаточно надежный для обработки произвольно поврежденных форм формата файла, созданного для атаки на систему.
  • Ваша надстройка не должна утечь ресурсы, которые будут создавать проблемы для процессов узла.
  • Надстройка не должна завершить работу, так как это также приведет к сбою процессов узла и замедлению процесса фильтрации.
  • Так как эти обработчики выполняются в фоновом системном процессе, они должны быстро выполняться с минимальным объемом ресурсов ЦП и операций ввода-вывода, используемых для удовлетворения требований к производительности системы.

Таким образом, эти надстройки должны быть написаны разработчиками с опытом создания кода на уровне системы.

Дополнительные ресурсы

  • Сведения о создании источника данных оболочки см. в разделе "Реализация базовых интерфейсов объектов папок".
  • Источники данных, которые должны использовать объект представления системных папок оболочки по умолчанию (DefView), см. в разделе "Реализация представления папок", функции SHCreateShellFolderView и структуры SFV_CREATE. Источники данных, использующие объект представления системных папок по умолчанию оболочки (DefView), должны реализовать следующий набор интерфейсов: IShellFolder, IShellFolder2, IPersistFolder, IPersistFolder2 и (необязательно) IPersistFolder3. Если реализация IShellFolder не использует SHCreateShellFolderView для создания DefView, объект представления оболочки может потребовать IFolderView.
  • ISearchFolderItemFactory — это основной интерфейс для потребителей источника данных Оболочки, известного как DBFolder. Дополнительные сведения о DBFolder см. в описании константы STR_PARSE_WITH_PROPERTIES в ключах строки контекста привязки. См. также массивы ассоциаций и IPropertySystem::GetPropertyDescriptionListFromString.
  • Дополнительные сведения о OLE DB см. в разделе "Обзор программирования OLE DB". Сведения о поставщике данных платформа .NET Framework для OLE DB см. в документации по пространству имен System.Data.OleDb.
  • Сведения о поддерживаемых сообществом досках сообщений в технологиях поиска см. в разделе "Windows: Форумы поиска".
  • Дополнительные сведения о связанных примерах кода см. в примерах кода поиска Windows.

Обзор Windows Search

Языки, поддерживаемые поиском Windows

Использование управляемого кода с данными оболочки и Windows Search

Руководство разработчика поиска Windows