Compartir a través de


Desarrollo de controladores de propiedades para Windows Search

Microsoft Windows Search usa controladores de propiedades para extraer los valores de las propiedades de los elementos y usa el esquema del sistema de propiedades para determinar cómo se debe indexar una propiedad específica. Para leer y indexar valores de propiedad, Windows Search invoca controladores de propiedad fuera de proceso para mejorar la seguridad y la solidez. En cambio, el Explorador de Windows invoca controladores de propiedades en proceso para leer y escribir valores de propiedad.

Este tema complementa el tema Del sistema de propiedades con información específica de Windows Search y contiene las secciones siguientes:

 

Decisiones de diseño para controladores de propiedades

La implementación de controladores de propiedades implica los pasos siguientes:

  1. Tomar decisiones de diseño con respecto a las propiedades que desea admitir.
  2. Crear un archivo de descripción de propiedad (.propdesc) para las propiedades que aún no están en el sistema de propiedades.
  3. Implementación y prueba del controlador de propiedades.
  4. Instalar y registrar los archivos de descripción de propiedad y controlador de propiedades.
  5. Prueba de la instalación y el registro del controlador de propiedades.

Antes de empezar, debe tener en cuenta las siguientes preguntas de diseño:

  • ¿Qué propiedades admite o debe admitir el formato de archivo?
  • ¿Estas propiedades ya están en el esquema del sistema?
  • ¿Puedo usar un controlador de propiedades proporcionado por el sistema existente?
  • ¿Qué propiedades se pueden mostrar a los usuarios finales?
  • ¿Qué propiedades pueden editar los usuarios?
  • ¿Debe admitirse la búsqueda de texto completo desde un controlador de propiedades o un filtro?
  • ¿Es necesario admitir aplicaciones heredadas? Si es así, ¿qué implemento?

Nota:

Antes de continuar, consulte Uso de controladores de propiedades proporcionados por el sistema para ver si puede usar un controlador de propiedades proporcionado por el sistema, lo que le ahorra tiempo y recursos de desarrollo.

 

Una vez que haya tomado estas decisiones, puede escribir descripciones formales de las propiedades personalizadas para que el motor de Windows Search pueda comenzar a indexar los archivos y las propiedades. Estas descripciones formales son archivos XML, descritos en Esquema de descripción de propiedades.

Decisiones sobre propiedades

Al considerar qué propiedades admitir, debe identificar las necesidades de indexación y búsqueda de los usuarios. Por ejemplo, puede identificar cien propiedades potencialmente útiles para el tipo de archivo, pero los usuarios pueden estar interesados en buscar solo en un puñado. Además, puede que quiera mostrar un grupo diferente, mayor o menor, de esas propiedades para los usuarios en el Explorador de Windows y permitir que los usuarios editen solo un subconjunto de esas propiedades mostradas.

El tipo de archivo puede admitir cualquier propiedad personalizada que defina, así como un conjunto de propiedades definidas por el sistema. Antes de crear una propiedad personalizada, revise Propiedades del sistema para ver si la propiedad que desea admitir ya está definida por una propiedad del sistema. Asegúrese siempre de admitir las propiedades más importantes definidas por el sistema.

Se recomienda usar una matriz para ayudarle a diseñar sus propiedades:

Nombre de propiedad ¿Es indexable? ¿Es visible? ¿Es editable?
property1 Y Y No
property... Y Y No
propertyn N N N

 

Para cada una de estas propiedades, debe determinar qué atributos debe tener y, a continuación, describirlos formalmente en archivos XML de descripción de propiedades (.propdesc). Entre los atributos se incluyen el tipo de datos, la etiqueta, la etiqueta, la cadena de ayuda y mucho más. En el caso de las propiedades indexables, debe prestar especial atención a los siguientes atributos de propiedad que se encuentran en el elemento XML searchInfo del archivo Property Description.

Atributo Descripción
inInvertedIndex Opcional. Indica si un valor de propiedad de cadena debe dividirse en palabras y cada palabra almacenada en el índice invertido. El índice invertido permite una búsqueda eficaz de palabras y frases sobre el valor de propiedad mediante CONTAINS o FREETEXT (por ejemplo, SELECT ... WHERE CONTAINS "sometext"). Si se establece en FALSE, las búsquedas se realizan en toda la cadena. La mayoría de las propiedades de cadena deben tener esta opción establecida en TRUE; las propiedades que no son de cadena deben tener esta opción establecida en FALSE. El valor predeterminado es FALSE.
isColumn Opcional. Indica si la propiedad debe almacenarse en la base de datos de Windows Search como una columna. El almacenamiento de la propiedad como columna permite recuperar, ordenar, agrupar y filtrar (es decir, usar cualquier predicado excepto CONTAINS o FREETEXT) en todo el valor de columna. Las propiedades mostradas al usuario deben tener este valor establecido en TRUE a menos que sea una propiedad textual muy grande (como el cuerpo de un documento) que se buscaría en el índice invertido. El valor predeterminado es FALSE.
isColumnSparse Opcional. Indica si una propiedad no toma espacio si el valor es NULL. Una propiedad no dispersa toma espacio para cada elemento, incluso si el valor es NULL. Si la propiedad tiene varios valores, este atributo siempre es TRUE. Este atributo solo debe ser FALSE si hay un valor presente para cada elemento. El valor predeterminado es TRUE.
columnIndexType Opcional. Para optimizar las consultas, el motor de Windows Search puede crear índices secundarios para las propiedades que tienen isColumn=TRUE. Esto requiere más procesamiento y espacio en disco durante la indexación, pero mejora el rendimiento durante la consulta. Si la propiedad tiende a ordenarse, agruparse o filtrarse (es decir, mediante =, !=, <, >, LIKE, MATCHES) con frecuencia por los usuarios, este atributo debe establecerse en "OnDisk". El valor predeterminado es "NotIndexed". Los valores siguientes son válidos:
  • NotIndexed: no se crea ningún índice secundario.
  • OnDisk: cree y almacene un índice secundario en el disco.
maxSize Opcional. Indica el tamaño máximo permitido para el valor de propiedad almacenado en la base de datos de búsqueda de Windows. Este límite se aplica a los elementos indviduales de un vector, no al vector en su conjunto. Los valores más allá de este tamaño se truncan. El valor predeterminado es "128" (bytes).
Actualmente Windows Search no usa maxSize al calcular la cantidad de datos que acepta de un archivo. En su lugar, el límite que usa Windows Search es el producto del tamaño del archivo y MaxGrowFactor (tamaño de archivo N * MaxGrowFactor) leído del registro en HKEY_LOCAL_MACHINE->Software->Microsoft->Windows Search->Gathering Manager->MaxGrowFactor. El MaxGrowFactor predeterminado es cuatro (4). Por lo tanto, si el tipo de archivo tiende a ser pequeño en tamaño total, pero tiene propiedades más grandes, Windows Search puede no aceptar todos los datos de propiedad que desea emitir. Sin embargo, puede aumentar MaxGrowFactor para satisfacer sus necesidades.

 

Nota:

Para el atributo columnIndexType, la ventaja de las consultas más rápidas debe pesarse con respecto al mayor tiempo de indexación y los costos de espacio que pueden incurrir los índices secundarios. Sin embargo, este costo solo se paga por los elementos que tienen un valor distinto deNULL, por lo que para la mayoría de las propiedades puede tener este atributo establecido en "OnDisk".

 

Compatibilidad con texto completo

Por lo general, la búsqueda de texto completo es compatible con componentes denominados filtros, sin embargo, para los tipos de archivo basados en texto con formatos de archivo sin complicar, los controladores de propiedades pueden proporcionar esta funcionalidad con menos esfuerzo de desarrollo. Debe revisar la sección Contenido de texto completo para ver una comparación de la funcionalidad del controlador de propiedades y filtros para ayudarle a decidir cuál es el mejor para el tipo de archivo. De especial importancia es el hecho de que los filtros pueden controlar varios identificadores de código de lenguaje (LCID) por archivo mientras los controladores de propiedades no pueden.

Nota:

Dado que los controladores de propiedades no pueden fragmentar el contenido de la manera en que los filtros pueden, los archivos grandes (incluso si son formatos de archivo no replicados) deben cargarse completamente en la memoria.

 

Consideraciones sobre la implementación del sistema operativo

Información de implementación para Windows 7

En Windows 7 y versiones posteriores, hay un nuevo comportamiento al registrar un controlador de propiedades, IFilter o una nueva extensión. Cuando se instala un nuevo controlador de propiedades o IFilter, los archivos con las extensiones correspondientes se vuelven a indexar automáticamente.

En Windows 7 se recomienda instalar un IFilter junto con sus controladores de propiedades correspondientes y que el IFilter se registre antes del controlador de propiedades. El registro del controlador de propiedades inicia la reindexación inmediata de archivos indizado previamente sin necesidad de reiniciar primero y aprovecha las ventajas de los IFilter registrados previamente para la indexación de contenido.

Si solo se instala un IFilter, sin un controlador de propiedades correspondiente, la reindexación automática se produce después de reiniciar el servicio de indexación o de reiniciar el sistema.

Para ver las marcas de descripción de propiedades específicas de Windows 7, consulta los siguientes temas de referencia:

Información de implementación para Windows Vista y versiones anteriores

Antes de Windows Vista, los filtros proporcionaron compatibilidad para analizar y enumerar el contenido y las propiedades del archivo. Con la introducción del sistema de propiedades, los controladores de propiedades controlan las propiedades de archivo mientras que los filtros controlan el contenido del archivo. Para Windows Vista, solo necesita desarrollar una implementación parcial de la interfazIFilteren coordinación con un controlador de propiedades, como se describe en Procedimientos recomendados para crear controladores de filtro en Windows Search.

Aunque el sistema de propiedades también se incluye con la instalación de Windows Search para Windows XP, las aplicaciones heredadas y de terceros pueden requerir que los filtros controle tanto el contenido como las propiedades. Por lo tanto, si está desarrollando en la plataforma Windows XP, debe proporcionar una implementación de filtro completa, así como un controlador de propiedades para el tipo de archivo o la propiedad personalizada.

 

Escribir archivos de descripción de propiedades

La estructura de los archivos XML de descripción de propiedades (.propdesc) se describe en el tema propertyDescription. De especial interés para la búsqueda son los atributos del elemento searchInfo. Una vez que haya decidido qué propiedades admitir, debe crear y registrar archivos de descripción de propiedades para cada propiedad. Al registrar los archivos .propdesc, se incluyen en la lista de descripción de propiedades del esquema y se convierten en nombres de columna dentro del almacén de propiedades del motor de búsqueda.

Puede registrar las descripciones de propiedades personalizadas mediante la función PSRegisterPropertySchema, una API contenedora que llama a IPropertySystem::RegisterPropertySchema del subsistema de esquema. Esta función informa al subsistema de esquema de la adición de archivos de esquema de descripción de propiedades (.propdesc), mediante rutas de acceso de archivo a los archivos .propdesc en el equipo local, normalmente el directorio de instalación de la aplicación en "Archivos de programa". Normalmente, una instalación o aplicación (por ejemplo, el instalador del controlador de propiedades) llamará a este método después de instalar los archivos .propdesc.

 

Implementación de controladores de propiedades

El desarrollo de un controlador de propiedades implica implementar las interfaces siguientes:

  • IInitialzeWithStream: proporciona inicialización basada en secuencias del controlador de propiedades.
  • IPropertyStore: enumera, obtiene y establece valores de propiedad.
  • IPropertyStoreCapabilities: Optional. Identifica si los usuarios pueden editar una propiedad desde una interfaz de usuario.

IInitializeWithStream

Como se describe en el tema Sistema de propiedades, se recomienda encarecidamente implementar controladores de propiedades con IInitializeWithStream para realizar la inicialización basada en secuencias. Si decide no implementar IInitializeWithStream, el controlador de propiedades debe dejar de ejecutarse en el proceso de aislamiento estableciendo la marca DisableProcessIsolation en la clave del Registro del controlador de propiedades. La deshabilitación del aislamiento de procesos suele estar pensada solo para controladores de propiedades heredados y debe evitarse a toda costa por cualquier código nuevo.

IPropertyStore

Para crear un controlador de propiedades, debe implementar la interfaz IPropertyStore con los métodos siguientes.

Method Descripción
Commit Guarda un cambio de propiedad en el archivo.
GetAt Recupera una clave de propiedad de la matriz de propiedades de un elemento.
GetCount Obtiene el número de propiedades adjuntas al archivo.
GetValue Recupera datos de una propiedad específica.
SetValue Establece un nuevo valor de propiedad o reemplaza o quita un valor existente.

 

 

 

En la documentación de IPropertyStore se incluyen consideraciones importantes para implementar esta interfaz.

Nota:

Si el controlador de propiedades emite varios valores para la misma propiedad para un elemento determinado, solo se almacena el último valor emitido en el catálogo.

 

 

IPropertyStoreCapabilities

Opcionalmente, los controladores de propiedades pueden implementar esta interfaz para deshabilitar la capacidad de un usuario para editar propiedades específicas. Normalmente, estas propiedades se pueden editar en la página Detalles y el panel, pero no se permiten editarlas en el controlador de propiedades de implementación. La implementación de esta interfaz proporciona correctamente una mejor experiencia de usuario que la alternativa: un simple error en tiempo de ejecución del shell.

 

Asegurarse de que los elementos se indexan

Ahora que ha implementado el controlador de propiedades, debe asegurarse de que los elementos para los que el controlador están registrados para la indexación. Puede usar el Administrador de catálogos para iniciar la reindización y también puede usar el Administrador de ámbitos de rastreo para configurar reglas predeterminadas que indican las direcciones URL que desea que el indexador rastree. Otra opción es seguir el ejemplo de código ReIndex en los ejemplos de código de Windows Search.

Para obtener más información, consulte Uso del Administrador de catálogos y Uso del Administrador de ámbitos de rastreo.

 

Instalación y registro de controladores de propiedad

Con el controlador de propiedades implementado, debe registrarse y su extensión de nombre de archivo asociada al controlador. En el ejemplo siguiente se muestran las claves y los valores del Registro necesarios para hacerlo.

HKEY_CLASSES_ROOT
   CLSID
      {<CLSID for property handler>}
         (Default) = <Property Handler Name>
         InProcServer32
            (Default) = <full path to property handler dll>
            ThreadingModel = <your threading model>
HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               PropertySystem
                  PropertyHandlers
                     <.fileextention>
                        (Default) = {<CLSID for property handler>}

 

Controladores de propiedades de prueba y solución de problemas

En la lista siguiente se proporcionan consejos sobre los tipos de pruebas que debe realizar:

  • Pruebe la obtención de resultados de cada propiedad única compatible con el tipo de archivo.
  • Use valores de propiedades grandes, por ejemplo, use una metatag grande en documentos HTML.
  • Compruebe que el controlador de propiedades no filtra los identificadores de archivo editándolo después de obtener la salida del controlador de propiedades o mediante una herramienta como oh.exe antes y después de enumerar las propiedades del archivo.
  • Pruebe todos los tipos de archivo asociados al controlador de propiedades. Por ejemplo, compruebe que el filtro HTML funciona con tipos de archivo .htm y .html.
  • Pruebe con archivos dañados. El controlador de propiedades debe producir un error correctamente.
  • Si una aplicación admite el cifrado, pruebe que el controlador de propiedades no genera texto cifrado.
  • Si el controlador de propiedades admite la búsqueda de texto completo:
    • Use varios caracteres Unicode especiales en el contenido del archivo y pruebe su salida.
    • Pruebe el control de documentos muy grandes para asegurarse de que el controlador de propiedades funciona según lo previsto.

Pruebas de instalación y configuración

Por último, debe probar las rutinas de instalación y desinstalación.

  • La instalación debe recuperarse de instalaciones con errores (por ejemplo, de cancelar y, a continuación, reiniciar la instalación).
  • La desinstalación debe eliminar todos los archivos asociados al controlador de propiedades.
  • La desinstalación no debe eliminar archivos distintos de los asociados a la instalación del controlador de propiedades.
  • Las claves del Registro asociadas al controlador de propiedades deben quitarse al desinstalarse.
  • La desinstalación debe funcionar incluso si los archivos se eliminan del directorio de instalación.

Controladores de propiedades de solución de problemas

A continuación se muestran algunos errores comunes que se producen al desarrollar controladores de propiedades:

  • Instalar archivos .propdesc o archivos DLL en un directorio de usuario.
  • Registro de componentes mediante rutas de acceso relativas.
  • Registrar componentes en HKEY_CURRENT_USER en lugar de HKEY_LOCAL_MACHINE.
  • Olvidando establecer DisableProcessIsolation para controladores que no son de flujo.
  • Colocación del archivo de prueba en una ubicación no indexada.

Si tiene problemas para que el controlador de propiedades funcione con el indexador, estas son algunas sugerencias para ayudarle a solucionar problemas:

  • Compruebe que las descripciones de las propiedades (archivos.propdesc) están marcadas como isColumn="true", isViewable="true" y isQueryable="true" según corresponda.
  • Compruebe que los archivos .propdesc están en una ubicación global.
  • Compruebe que registró los archivos .propdesc mediante rutas de acceso absolutas.
  • Compruebe que el registro de eventos no registró ningún error al registrar el archivo .propdesc.
  • Compruebe que los archivos DLL están en una ubicación global (y no en el perfil de usuario).
  • Compruebe que los archivos DLL están registrados en HKEY_LOCAL_MACHINE\Software\Classes.
  • Compruebe que los archivos DLL se registran mediante rutas de acceso completas (o REG_EXPAND_SZ cadenas que se expanden a rutas de acceso absolutas mediante variables de entorno conocidas por la cuenta del sistema).
  • Compruebe que el controlador de propiedades funciona en el Explorador de Windows.
  • Aunque se recomienda usar IInitializeWithStream, si debe usar IInitializeWithFile o IInitializeWithItem, compruebe que especifica DisableProcessIsolation.
  • Compruebe que las opciones de indexación Panel de control enumeran el tipo de archivo como un tipo de archivo indexado.
  • Compruebe que el archivo de prueba está en una ubicación indexada.
  • Compruebe que el archivo de prueba se ha modificado desde que instaló el controlador de propiedades.

Si el archivo de prueba está en una ubicación indexada y el indexador ya ha rastreado esa ubicación, debe modificar el archivo de alguna manera para desencadenar una reindexación del archivo.

 

Uso de controladores de propiedades proporcionados por el sistema

Windows incluye una serie de controladores de propiedades proporcionados por el sistema que puede usar si el formato del tipo de archivo es compatible. Si define una nueva extensión de archivo que usa uno de estos formatos, puede usar los controladores proporcionados por el sistema registrando el identificador de clase de controlador (CLSID) para la extensión de archivo.

Puede usar el CLSID que se muestra en la tabla siguiente para registrar los controladores de propiedades proporcionados por el sistema para el tipo de formato de archivo.

Format CLSID
OLE DocFile {8d80504a-0826-40c5-97e1-ebc68f953792}
Guardar XML de juego {ECDD6472-2B9B-4b4b-AE36-F316DF3C8D60}
Controlador XPS/OPC {45670FA8-ED97-4F44-BC93-305082590BFB}
XML {c73f6f30-97a0-4ad1-a08f-540d4e9bc7b9}

 

Antes de crear una propiedad personalizada, debe estar seguro de que no hay una propiedad definida por el sistema que puede usar en su lugar. Puede enumerar las propiedades definidas por el sistema llamando a PSEnumeratePropertyDescriptions o mediante la herramienta de línea de comandos prop.exe.

El esquema del sistema define cómo interactúan estas propiedades con el indexador y no se puede cambiar. Además, la aplicación que usa para crear, editar y guardar el tipo de archivo también debe cumplir con cierto comportamiento. Por ejemplo, si la aplicación implementa un guardado seguro (por el que se crea un archivo temporal durante la edición y, después, ReplaceFile() se usa para intercambiar la nueva versión del antiguo), debe transferir todas las propiedades del archivo original al nuevo archivo. Si no se hace, el archivo pierde las propiedades agregadas por los usuarios u otras aplicaciones.

 

Los

A continuación se muestra el registro del controlador OLE DocFile proporcionado por el sistema para un tipo de archivo con . Extensión OLEDocFile.

HKEY_CLASSES_ROOT
   SystemFileAssociations
      .OLEDocFile
         shellex
            {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
               (Default) = {9DBD2C50-62AD-11d0-B806-00C04FD706EC}

A continuación se muestra el registro de la información de lista de propiedades para que las propiedades de . Los archivos OLEDocFile se muestran en la pestaña Detalles y el panel.

HKEY_CLASSES_ROOT
   SystemFileAssociations
      .OLEDocFile
         ExtendedTileInfo = prop:System.ItemType;System.Size;System.DateModified;System.Author;System.OfflineAvailability
         FullDetails = prop:System.PropGroup.Description;System.Title;System.Subject;
System.Keywords;System.Category;System.Comment;System.PropGroup.Origin;
System.Author;System.Document.LastAuthor;System.Document.RevisionNumber;
System.Document.Version;System.ApplicationName;System.Company;System.Document.Manager;
System.Document.DateCreated;System.Document.DateSaved;System.Document.DatePrinted;
System.Document.TotalEditingTime;System.PropGroup.Content;System.ContentStatus;
System.ContentType;System.Document.PageCount;System.Document.WordCount;
System.Document.CharacterCount;System.Document.LineCount;
System.Document.ParagraphCount;System.Document.Template;System.Document.Scale;
System.Document.LinksDirty;System.Language;System.PropGroup.FileSystem;
System.ItemNameDisplay;System.ItemType;System.ItemFolderPathDisplay;
System.DateCreated;System.DateModified;System.Size;System.FileAttributes;
System.OfflineAvailability;System.OfflineStatus;System.SharedWith;
System.FileOwner;System.ComputerName
         InfoTip = prop:System.ItemType;System.Size;System.DateModified;System.Document.PageCoun
         PerceivedType = document
         PreviewDetails = prop:*System.DateModified;System.Author;System.Keywords;
*System.Size;System.Title;System.Comment;System.Category;
*System.Document.PageCount;System.ContentStatus;System.ContentType;
*System.OfflineAvailability;*System.OfflineStatus;System.Subject;
*System.DateCreated;*System.SharedWith

 

Referencia

Asignaciones de propiedad

Conceptual

Procedimientos recomendados para crear controladores de filtro en Windows Search

Proceso de indexación

Desarrollo de controladores de protocolo

Propiedades definidas por el sistema para formatos de archivo personalizados

Otros recursos

Sistema de propiedades

propiedades del sistema

Ejemplos de código de Windows Search