Sviluppo di gestori di proprietà per Windows Search
Microsoft Windows Search usa gestori di proprietà per estrarre i valori delle proprietà dagli elementi e usa lo schema del sistema di proprietà per determinare come indicizzare una proprietà specifica. Per leggere e indicizzare i valori delle proprietà, i gestori di proprietà vengono richiamati out-of-process da Windows Search per migliorare la sicurezza e l'affidabilità. Al contrario, i gestori delle proprietà vengono richiamati nel processo da Esplora risorse per la lettura e la scrittura dei valori delle proprietà.
Questo argomento integra l'argomento Property System con informazioni specifiche di Windows Search e contiene le sezioni seguenti:
- Decisioni di progettazione dei gestori di proprietà
- Scrittura di File di Descrizione delle Proprietà
- implementazione di gestori di proprietà
- garantire che gli elementi vengano indicizzati
- L'Installazione e La Registrazione dei Gestori di Proprietà
- Test e Risoluzione dei Problemi Relativi ai Gestori di Proprietà
- Uso dei Gestori di Proprietà System-Supplied
- argomenti correlati
Decisioni di progettazione per gestori di proprietà
L'implementazione dei gestori di proprietà prevede i passaggi seguenti:
- Prendere decisioni di progettazione relative alle proprietà che si desidera supportare.
- Creazione di un file Descrizione proprietà (con estensione propdesc) per le proprietà non già presenti nel sistema di proprietà.
- Implementazione e test del gestore delle proprietà.
- Installazione e registrazione del gestore delle proprietà e dei file di descrizione delle proprietà.
- Test dell'installazione e della registrazione del gestore delle proprietà.
Prima di iniziare, è necessario considerare le domande di progettazione seguenti:
- Quali proprietà supporta/dovrebbe supportare il formato del file?
- Queste proprietà sono già presenti nello schema di sistema?
- È possibile usare un gestore di proprietà fornito dal sistema esistente?
- Quali proprietà possono essere visualizzate agli utenti finali?
- Quali proprietà possono essere modificate dagli utenti?
- Il supporto per la ricerca full-text deve provenire da un gestore di proprietà o da un filtro?
- È necessario supportare le applicazioni legacy? In tal caso, cosa devo implementare?
Nota
Prima di continuare, vedere Using System-Supplied Property Handlers per verificare se è possibile usare un gestore di proprietà fornito dal sistema, risparmiando tempo e risorse di sviluppo.
Dopo aver preso queste decisioni, è possibile scrivere descrizioni formali delle proprietà personalizzate in modo che il motore di Windows Search possa iniziare a indicizzare i file e le proprietà. Queste descrizioni formali sono file XML, descritte in Schema di descrizione delle proprietà.
Decisioni relative alle proprietà
Quando si considerano le proprietà da supportare, è necessario identificare le esigenze di indicizzazione e ricerca degli utenti. Ad esempio, potresti essere in grado di identificare cento proprietà potenzialmente utili per il tipo di file, ma gli utenti potrebbero essere interessati a cercare solo una manciata. Inoltre, potresti voler visualizzare un gruppo diverso, più grande o più piccolo, di tali proprietà agli utenti in Esplora risorse e consentire agli utenti di modificare solo un subset di tali proprietà visualizzate.
Il tipo di file può supportare qualsiasi proprietà personalizzata definita, nonché un set di proprietà definite dal sistema. Prima di creare una proprietà personalizzata, esaminare proprietà di sistema per verificare se la proprietà che si desidera supportare è già definita da una proprietà di sistema. Assicurarsi sempre di supportare le proprietà più importanti definite dal sistema.
Raccomandiamo di usare una matrice per progettare le proprietà.
Nome della proprietà | È indicizzabile? | È visualizzabile? | È modificabile? |
---|---|---|---|
property1 | Y | Y | N |
proprietà... | Y | Y | N |
proprietà | N | N | N |
Per ognuna di queste proprietà, è necessario determinare quali attributi devono avere e quindi descriverli formalmente nei file XML Descrizione proprietà (con estensione propdesc). Gli attributi includono il tipo di dati della proprietà, l'etichetta, la stringa di aiuto e altro ancora. Per le proprietà indicizzate, è consigliabile prestare particolare attenzione agli attributi di proprietà seguenti trovati nell'searchInfo elemento XML del file Property Description.
Attributo | Descrizione |
---|---|
nell'indice invertito | Opzionale. Indica se un valore della proprietà stringa deve essere suddiviso in parole e ogni parola archiviata nell'indice invertito. L'indice invertito consente una ricerca efficiente di parole e frasi sul valore della proprietà usando CONTAINS o FREETEXT (ad esempio, SELECT ... WHERE CONTAINS "sometext"). Se impostato su FALSE, le ricerche vengono eseguite sull'intera stringa. La maggior parte delle proprietà stringa deve avere questo valore impostato su TRUE; Le proprietà non stringa devono avere questo valore impostato su FALSE. Il valore predefinito è FALSE. |
èColonna | Opzionale. Indica se la proprietà deve essere archiviata nel database di Windows Search come colonna. L'archiviazione della proprietà come colonna consente il recupero, l'ordinamento, il raggruppamento e il filtro , ovvero l'uso di qualsiasi predicato tranne CONTAINS o FREETEXT, sull'intero valore della colonna. Le proprietà visualizzate all'utente devono avere questa proprietà impostata su TRUE a meno che non si tratti di una proprietà testuale molto grande (ad esempio il corpo di un documento) in cui verrà eseguita la ricerca nell'indice invertito. Il valore predefinito è FALSE. |
èColonnaRara | Opzionale. Indica se una proprietà non richiede spazio se il valore è NULL. Una proprietà non sparse occupa spazio per ogni elemento, anche se il valore è NULL. Se la proprietà è multivalore, questo attributo viene sempre TRUE. Questo attributo deve essere FALSE solo se è presente un valore per ogni elemento. Il valore predefinito è TRUE. |
tipoIndiceColonna | Opzionale. Per ottimizzare l'esecuzione di query, il motore di Ricerca di Windows può creare indici secondari per le proprietà con isColumn=TRUE. Ciò richiede più elaborazione e spazio su disco durante l'indicizzazione, ma migliora le prestazioni durante l'esecuzione di query. Se la proprietà tende a essere ordinata, raggruppata o filtrata (ovvero utilizzando =, !=, <, >, LIKE, MATCHES) frequentemente dagli utenti, questo attributo deve essere impostato su "OnDisk". Il valore predefinito è "NotIndexed". I valori seguenti sono validi:
|
dimensione massima | Opzionale. Indica le dimensioni massime consentite per il valore della proprietà archiviato nel database di Ricerca di Windows. Questo limite si applica agli elementi indviduali di un vettore, non al vettore nel suo complesso. I valori superiori a questa dimensione vengono troncati. Il valore predefinito è "128" (byte). Attualmente, Windows Search non usa maxSize per calcolare la quantità di dati accettata da un file. Al contrario, il limite utilizzato da Windows Search è il prodotto della dimensione del file e MaxGrowFactor (dimensione del file N * MaxGrowFactor) letto dal registro di sistema in HKEY_LOCAL_MACHINE->Software->Microsoft->Windows Search->Gathering Manager->MaxGrowFactor. Il valore predefinito di MaxGrowFactor è quattro (4). Di conseguenza, se il tipo di file tende a essere ridotto in dimensioni totali ma con proprietà più grandi, Windows Search potrebbe non accettare tutti i dati delle proprietà che si desidera emettere. Tuttavia, è possibile aumentare MaxGrowFactor in base alle proprie esigenze. |
Nota
Per l'attributo columnIndexType, il vantaggio delle query più veloci deve essere ponderato rispetto al tempo di indicizzazione e ai costi di spazio maggiori che gli indici secondari possono comportare. Tuttavia, questo costo viene pagato solo per gli articoli con un valorediverso da null, quindi per la maggior parte delle proprietà questo attributo può essere selezionato come "OnDisk".
supporto Full-Text
In generale, la ricerca full-text è supportata dai componenti denominati filtri ; tuttavia, per i tipi di file di testo con formati di file semplici, i gestori di proprietà possono essere in grado di fornire questa funzionalità con meno sforzo di sviluppo. È consigliabile esaminare la sezione Full-Text Contenuto per un confronto tra le funzionalità del filtro e del gestore delle proprietà per decidere qual è la soluzione migliore per il tipo di file. Di particolare importanza è il fatto che i filtri possono gestire più identificatori di codice di lingua (LCID) per file, mentre i gestori di proprietà non possono.
Nota
Poiché i gestori di proprietà non possono suddividere il contenuto nel modo in cui i filtri possono, i file di grandi dimensioni (anche se sono formati di file non replicati) devono essere caricati completamente in memoria.
Considerazioni sull'implementazione del sistema operativo
Informazioni sull'implementazione per Windows 7
In Windows 7 e versioni successive, vi è un nuovo comportamento durante la registrazione di un gestore di proprietà, IFiltero una nuova estensione. Quando viene installato un nuovo gestore di proprietà e/o IFilter, i file con le estensioni corrispondenti vengono reindicizzare automaticamente.
In Windows 7 è consigliabile che si installi un IFilter insieme ai corrispondenti gestori di proprietà e che il IFilter venga registrato prima dei gestori di proprietà. La registrazione del gestore delle proprietà avvia la reindicizzazione immediata dei file indicizzati in precedenza senza prima richiedere un riavvio e sfrutta i filtri IFilter registrati in precedenza allo scopo dell'indicizzazione del contenuto.
Se viene installato solo un IFilter, senza un gestore di proprietà corrispondente, la reindicizzazione automatica si verifica dopo un riavvio del servizio di indicizzazione o un riavvio del sistema.
Per i flag di descrizione delle proprietà specifici di Windows 7, vedi gli argomenti di riferimento seguenti:
- GETPROPERTYSTOREFLAGS
- PROPDESC_COLUMNINDEX_TYPE
- PROPDESC_SEARCHINFO_FLAGS
Informazioni sull'implementazione per Windows Vista e versioni precedenti
Prima di Windows Vista, i filtri forniva il supporto per l'analisi e l'enumerazione del contenuto e delle proprietà dei file. Con l'introduzione del sistema di proprietà, i gestori delle proprietà gestiscono le proprietà dei file mentre i filtri gestiscono il contenuto del file. Per Windows Vista, è necessario sviluppare solo un'implementazione parziale dell'interfaccia IFilter in coordinamento con un gestore delle proprietà, come descritto in Procedure consigliate per la creazione di gestori di filtri in Windows Search.
Anche se il sistema di proprietà è incluso anche nell'installazione di Windows Search per Windows XP, le applicazioni di terze parti e legacy possono richiedere che i filtri gestiscono sia il contenuto che le proprietà. Pertanto, se si sviluppa nella piattaforma Windows XP, è necessario fornire un'implementazione completa del filtro, nonché un gestore di proprietà per il tipo di file o la proprietà personalizzata.
Scrittura di file di descrizione delle proprietà
La struttura dei file XML di descrizione della proprietà (con estensione .propdesc) è descritta nell'argomento propertyDescription. Di particolare interesse per la ricerca sono gli attributi dell'elemento searchInfo. Dopo aver deciso quali proprietà supportare, è necessario creare e registrare i file di descrizione delle proprietà per ogni proprietà. Quando si registrano i file con estensione propdesc, questi vengono inclusi nell'elenco delle descrizioni delle proprietà dello schema e diventano nomi di colonna all'interno dell'archivio delle proprietà del motore di ricerca.
È possibile registrare le descrizioni delle proprietà personalizzate usando la funzione PSRegisterPropertySchema, un'API wrapper che chiama il sottosistema dello schema IPropertySystem::RegisterPropertySchema. Questa funzione informa il sottosistema dello schema dell'aggiunta di file di descrizione delle proprietà (.propdesc), utilizzando i percorsi dei file .propdesc sul computer locale, solitamente nella directory di installazione dell'applicazione sotto "Program Files". In genere, un programma di installazione o un'applicazione (ad esempio, il programma di installazione del gestore di proprietà) chiamerà questo metodo dopo l'installazione dei file con estensione propdesc.
Implementazione di gestori di proprietà
Lo sviluppo di un gestore di proprietà comporta l'implementazione delle interfacce seguenti:
- IInitialzeWithStream: Fornisce l'inizializzazione tramite flusso del gestore di proprietà.
- IPropertyStore: enumera, ottiene e imposta i valori delle proprietà.
- IPropertyStoreCapabilities: facoltativo. Identifica se gli utenti possono modificare una proprietà da un'interfaccia utente.
IInitializeWithStream
Come descritto nell'argomento del sistema di proprietà, raccomandiamo vivamente di implementare gestori di proprietà con IInitializeWithStream per eseguire l'inizializzazione basata su flusso. Se si sceglie di non implementare IInitializeWithStream, il gestore delle proprietà deve evitare di eseguire nel processo di isolamento impostando il flag DisableProcessIsolation sulla chiave del Registro di sistema del gestore delle proprietà. La disabilitazione dell'isolamento del processo è in genere destinata solo ai gestori di proprietà legacy e deve essere evitata in modo strenuo da qualsiasi nuovo codice.
IPropertyStore
Per creare un gestore di proprietà, è necessario implementare l'interfacciaIPropertyStore con i metodi seguenti.
Metodo | Descrizione |
---|---|
Commettere | Salva una modifica della proprietà nel file. |
GetAt | Recupera una chiave di proprietà dalla matrice di proprietà di un elemento. |
GetCount | Ottiene il numero di proprietà collegate al file. |
GetValue | Recupera i dati per una proprietà specifica. |
ImpostaValore | Imposta un nuovo valore della proprietà o sostituisce o rimuove un valore esistente. |
Considerazioni importanti per l'implementazione di questa interfaccia sono incluse nella documentazioneIPropertyStore.
Nota
Se il gestore delle proprietà genera più valori per la stessa proprietà per un determinato elemento, solo l'ultimo valore generato viene archiviato nel catalogo.
IPropertyStoreCapabilities
I gestori delle proprietà possono facoltativamente implementare questa interfaccia per disabilitare la capacità di un utente di modificare proprietà specifiche. Queste proprietà sono in genere modificabili nella pagina Dettagli e nel riquadro, ma non è consentito modificarle nel gestore delle proprietà di implementazione. L'implementazione di questa interfaccia offre un'esperienza utente migliore rispetto all'alternativa, ovvero un semplice errore di run-time dalla shell.
Assicurarsi che i tuoi elementi vengano indicizzati
Ora che hai implementato il tuo gestore delle proprietà, assicurati che gli elementi per cui il tuo gestore è registrato vengano indicizzati. È possibile usare il Catalog Manager per avviare la reinidicizzazione, ed è possibile anche utilizzare il Crawl Scope Manager per configurare le regole predefinite che indicano gli URL che si vuole che l'indicizzatore esegua la scansione. Un'altra opzione consiste nel seguire l'esempio di codice ReIndex negli esempi di codice di Ricerca di Windows .
Per altre informazioni, vedere Utilizzo del Catalog Manager e Utilizzo del Crawl Scope Manager.
Installazione e registrazione dei gestori di proprietà
Con il gestore di proprietà implementato, questo deve essere registrato e l'estensione dei nomi dei file deve essere associata al gestore. L'esempio seguente mostra le chiavi e i valori del Registro di sistema necessari per eseguire questa operazione.
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>}
Test e risoluzione dei problemi dei gestori di proprietà
L'elenco seguente fornisce consigli sui tipi di test da eseguire:
- Testare il recupero dell'output da ogni singola proprietà supportata dal tipo di file.
- Usare valori di proprietà grandi, ad esempio, usare un metatag di grandi dimensioni nei documenti HTML.
- Verificare che il gestore delle proprietà non provochi perdite di handle di file modificandolo dopo aver ottenuto l'output dal gestore stesso oppure usando uno strumento come oh.exe prima e dopo aver enumerato le proprietà del file.
- Testare tutti i tipi di file associati al Property Handler. Ad esempio, verificare che il filtro HTML funzioni con .htm e .html tipi di file.
- Eseguire il test con file danneggiati. Il gestore delle proprietà dovrebbe gestire gli errori in modo elegante.
- Se un'applicazione supporta la crittografia, verificare che il gestore della proprietà non restituisca testo crittografato.
- Se il gestore delle proprietà supporta la ricerca a testo completo:
- Usare più caratteri Unicode speciali nel contenuto del file e testarne l'output.
- Testare la gestione di documenti di grandi dimensioni per assicurarsi che il gestore delle proprietà funzioni come previsto.
Test di installazione e configurazione
Infine, è necessario testare le routine di installazione e disinstallazione.
- L'installazione deve essere ripristinata da installazioni non riuscite( ad esempio, dall'annullamento e quindi dal riavvio dell'installazione).
- La disinstallazione deve eliminare tutti i file associati al gestore di proprietà.
- La disinstallazione non deve eliminare file diversi da quelli associati all'installazione del gestore delle proprietà.
- Le chiavi del Registro di sistema associate al gestore delle proprietà devono essere rimosse durante la disinstallazione.
- La disinstallazione deve funzionare anche se i file vengono eliminati dalla directory di installazione.
Risoluzione dei problemi relativi ai gestori di proprietà
Di seguito sono riportati alcuni errori comuni eseguiti durante lo sviluppo di gestori di proprietà:
- Installare file .propdesc o DLL nella directory dell'utente.
- Registrazione dei componenti tramite percorsi relativi.
- Registrazione dei componenti in HKEY_CURRENT_USER anziché HKEY_LOCAL_MACHINE.
- Dimenticare di impostare DisableProcessIsolation per i gestori non-stream.
- Inserimento del file di test in un percorso non indicizzato.
Se si verificano problemi durante l'uso del gestore delle proprietà con l'indicizzatore, ecco alcuni suggerimenti utili per risolvere i problemi:
- Verificare che le descrizioni delle proprietà (file con estensione propdesc) siano contrassegnate con isColumn="true", isViewable="true" e isQueryable="true" in base alle esigenze.
- Verificare che i file .propdesc siano collocati in una posizione globale.
- Verificare di aver registrato i file con estensione propdesc usando percorsi assoluti.
- Verificare che il registro eventi non abbia registrato errori durante la registrazione del file con estensione propdesc.
- Verificare che le DLL si trovano in una posizione globale (e non nel profilo utente).
- Verificare che le vostre DLL siano registrate in HKEY_LOCAL_MACHINE\Software\Classes.
- Verificare che le DLL siano registrate usando percorsi completi (o stringhe REG_EXPAND_SZ che si espandono in percorsi assoluti usando variabili di ambiente note dall'account di sistema).
- Verificare che il gestore delle proprietà funzioni in Esplora File.
- Sebbene sia consigliabile usare IInitializeWithStream, se è necessario usare IInitializeWithFile o IInitializeWithItem, verificare di specificare DisableProcessIsolation.
- Verificare che nel Pannello di controllo Opzioni di indicizzazione sia elencato il tipo di file come tipo di file indicizzato.
- Verificare che il file di test si trova in un percorso indicizzato.
- Verificare che il file di test sia stato modificato dopo aver installato il gestore delle proprietà.
Se il file di test si trova in un percorso indicizzato e l'indicizzatore ha già eseguito la ricerca per indicizzazione in tale percorso, è necessario modificare il file in qualche modo per attivare una reindicizzazione del file.
Uso di gestori di proprietà System-Supplied
Windows include diversi gestori di proprietà forniti dal sistema che è possibile usare se il formato del tipo di file è compatibile. Se si definisce una nuova estensione di file che usa uno di questi formati, è possibile usare i gestori forniti dal sistema registrando l'identificatore di classe del gestore (CLSID) per l'estensione di file.
È possibile usare CLSID elencato nella tabella seguente per registrare i gestori delle proprietà forniti dal sistema per il tipo di formato di file.
Formato | CLSID |
---|---|
OLE DocFile | {8d80504a-0826-40c5-97e1-ebc68f953792} |
Salvare il file XML del gioco | {ECDD6472-2B9B-4b4b-AE36-F316DF3C8D60} |
Gestore XPS/OPC | {45670FA8-ED97-4F44-BC93-305082590BFB} |
XML | {c73f6f30-97a0-4ad1-a08f-540d4e9bc7b9} |
Prima di creare una proprietà personalizzata, è necessario assicurarsi che non esista una proprietà definita dal sistema che è possibile usare. È possibile enumerare le proprietà definite dal sistema chiamando PSEnumeratePropertyDescriptions o usando lo strumento da riga di comando prop.exe.
Lo schema di sistema definisce il modo in cui queste proprietà interagiscono con l'indicizzatore e non è possibile modificarle. Inoltre, l'applicazione usata per creare, modificare e salvare il tipo di file deve essere conforme anche a determinati comportamenti. Ad esempio, se l'applicazione implementa il salvataggio sicuro (in cui viene creato un file temporaneo durante la modifica e quindi ReplaceFile() viene usato per scambiare la nuova versione per la versione precedente, deve trasferire tutte le proprietà dal file originale al nuovo file. In caso contrario, il file perde le proprietà aggiunte da utenti o altre applicazioni.
esempio di
Di seguito viene illustrata la registrazione del gestore di DocFile OLE fornito dal sistema per un tipo di file con estensione .OLEDocFile.
HKEY_CLASSES_ROOT
SystemFileAssociations
.OLEDocFile
shellex
{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
(Default) = {9DBD2C50-62AD-11d0-B806-00C04FD706EC}
Di seguito viene illustrata la registrazione delle informazioni sull'elenco delle proprietà affinché le proprietà dei file .OLEDocFile vengano visualizzate nella scheda Dettagli e nel riquadro.
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
Argomenti correlati
-
Riferimento
-
concettuale
-
procedure consigliate per la creazione di gestori di filtri in Windows Search
-
Proprietà System-Defined per i formati di file personalizzati
-
altre risorse