Windows Search come piattaforma di sviluppo
Per indicizzare il contenuto e le proprietà dei nuovi formati di file e archivi dati, è necessario estendere Microsoft Windows Search con i componenti aggiuntivi.
Prima che uno sviluppatore di terze parti di nuovi formati di file e archivi dati possa ottenere tali formati e archivi da visualizzare nei risultati delle query in Esplora risorse, lo sviluppatore deve eseguire le tre operazioni seguenti:
- Implementare un'origine dati shell per estendere lo spazio dei nomi shell.
- Esporre gli elementi in un archivio dati (se aggiungono un nuovo archivio dati, perché è necessario indicizzare).
- Sviluppare un gestore di protocollo in modo che Windows Search possa accedere ai dati per l'indicizzazione.
Questo argomento è organizzato come segue:
- Per iniziare
- Panoramica degli scenari di sviluppo della ricerca
- Panoramica dei gestori
- Linee guida per il programma di installazione del componente aggiuntivo
- Nota per gli implementatori
- Risorse aggiuntive
- Argomenti correlati
Introduzione
Prima di iniziare a creare un'applicazione Windows Search, tenere presente che il modo preferito per eseguire questa operazione consiste nell'usare un'origine dati shell. Un'origine dati shell estende lo spazio dei nomi shell ed espone gli elementi in un archivio dati. Gli elementi nell'archivio dati possono quindi essere indicizzati dal sistema di Windows Search usando un gestore di protocollo. Questo approccio indiretto per l'accesso a Windows Search implementando un'origine dati shell è preferibile perché fornisce l'accesso alla funzionalità shell completa. In questo modo si garantisce un'esperienza utente ragionevole.
Se si desidera che i risultati della query vengano visualizzati in Esplora risorse, è necessario implementare un'origine dati shell prima di poter creare un gestore di protocollo per estendere l'indice. Tuttavia, se tutte le query saranno a livello di codice (ad esempio tramite OLE DB) e interpretate dal codice dell'applicazione anziché dalla shell, uno spazio dei nomi shell è comunque preferibile ma non obbligatorio.
Per Windows è necessario un gestore di protocolli per ottenere informazioni sul contenuto dei file, ad esempio elementi nei database o tipi di file personalizzati. Anche se Windows Search può indicizzare il nome e le proprietà del file, Windows non conosce il contenuto del file. Di conseguenza, tali elementi non possono essere indicizzati o esposti nella shell di Windows. Implementando un gestore di protocollo personalizzato, è possibile esporre questi elementi. Per un elenco dei gestori identificati dallo scenario di sviluppo che si sta tentando di ottenere, vedere Panoramica dei gestori.
Panoramica degli scenari di sviluppo della ricerca
Gli scenari di sviluppo più comuni in Windows Search sono:
- Aggiunta di un nuovo archivio dati
- Aggiunta di un nuovo formato di file
- Utilizzo dei risultati di Windows Search
Aggiunta di un nuovo archivio dati
È necessario un archivio dati shell per Windows Search solo se si aggiunge un nuovo archivio dati da indicizzare. Un archivio dati è un repository di dati che possono essere esposti al modello di programmazione shell come contenitore usando un'origine dati Shell. Gli elementi in un archivio dati possono quindi essere indicizzati dal sistema di Windows Search usando un gestore di protocolli. Il gestore del protocollo implementa il protocollo per l'accesso a un'origine contenuto nel formato nativo. Le interfacce ISearchProtocol e ISearchProtocol2 vengono usate per implementare un gestore di protocollo personalizzato per espandere le origini dati che è possibile indicizzare. Per informazioni sulla creazione di un'origine dati shell, vedere Implementazione delle interfacce oggetto cartella di base.
Aggiunta di un nuovo formato di file
Se si aggiunge un nuovo formato di file personalizzato, è necessario sviluppare un gestore di filtri o un gestore di proprietà, ma non entrambi. Un filtro è un'implementazione dell'interfaccia IFilter . Apre i file di un tipo di file specifico e filtra le proprietà e i blocchi di testo per l'indicizzatore. I filtri sono associati ai tipi di file, come indicato dalle estensioni di file, dai tipi MIME o dagli identificatori di classe (CLSID). Anche se un filtro può gestire più tipi di file, ogni tipo di file funziona con un solo filtro.
Un gestore di proprietà converte i dati archiviati in un file in uno schema strutturato riconosciuto da e accessibile da Esplora risorse, Windows Search e altre applicazioni. Questi sistemi possono quindi interagire con il gestore di proprietà per scrivere e leggere proprietà da e verso un file. I dati tradotti includono visualizzazione dettagli, suggerimenti, riquadro dettagli, pagine delle proprietà e così via. Ogni gestore di proprietà è associato a un particolare tipo di file, identificato dall'estensione del nome file. Per eseguire le operazioni seguenti, è necessario un gestore di proprietà:
- Mostra le proprietà degli elementi non indicizzati nell'interfaccia utente.
- Supportare la scrittura delle proprietà.
Utilizzo dei risultati di Windows Search
Le sezioni seguenti descrivono diversi modi per utilizzare i risultati di Windows Search:
- Esecuzione di query sui dati
- Esecuzione di query su archivi dati remoti (ricerca federata)
- Indicizzazione di file ed elementi
- Indicizzazione di un archivio dati
- Gestione del processo di indicizzazione
- Integrazione del sistema di proprietà Windows con le applicazioni di Windows Search
Esecuzione di query su dati
Gli sviluppatori che scrivono applicazioni oltre al sistema di proprietà combinato di Windows Search e Windows possono accedere a file ed elementi indipendentemente dal tipo di applicazione o di file. Esistono due modi per consentire alle applicazioni di accedere ai dati dell'indicizzatore:
- Le applicazioni comunicano direttamente con OLE DB inviando query SQL (Structured Query Language) di Windows Search al provider OLE DB di Windows Search per recuperare i risultati. Le query possono essere create manualmente o usando l'interfaccia ISearchQueryHelper per generare SQL da parole chiave di ricerca e Sintassi di query avanzata (AQS).
- Le applicazioni funzionano tramite il livello Shell. Il vantaggio del livello shell è che supporta anche altre origini come grep. Tuttavia, lo svantaggio è che non tutte le funzionalità dell'indicizzatore sono disponibili.
Un'altra opzione consiste nell'usare i protocolli search-ms:// e search://, che eseguono ricerche basate su URL di cui viene eseguito il rendering tramite Esplora risorse. Questa opzione consente lo sviluppo più leggero, ma non restituisce risultati o selezioni utente dalla visualizzazione dei risultati all'applicazione chiamante. Inoltre, come altri protocolli, le applicazioni di ricerca di terze parti possono assumere il controllo dei protocolli search-ms:// e search:// se le applicazioni sono conformi al set di funzionalità richiesto. Per altre informazioni sull'esecuzione di query, vedere Processo di query in Ricerca di Windows ed Esecuzione di query sull'indice a livello di codice.
Esecuzione di query su archivi dati remoti (ricerca federata)
In Windows 7 e versioni successive, la ricerca federata offre un nuovo provider di ricerca che esegue query sugli archivi dati remoti tramite server Web, tramite il protocollo OpenSearch ed enumera i risultati come feed RSS o Atom XML. I connettori di ricerca sono giunzioni dello spazio dei nomi che simulano il comportamento delle cartelle usando un provider di ricerca. Per altre informazioni sulla federazione di ricerca in archivi dati remoti in Windows 7, vedere Ricerca federata in Windows.
Indicizzazione di file ed elementi
Il contenuto indicizzato si basa sui tipi di file e di dati supportati tramite componenti aggiuntivi inclusi in Windows Search e le regole di inclusione e esclusione predefinite per le cartelle nel file system. Ad esempio, i filtri inclusi in Ricerca finestre supportano oltre 200 tipi comuni di dati, tra cui documenti di Microsoft Office, posta elettronica di Microsoft Outlook (insieme al gestore del protocollo MAPI), file di testo normale, HTML e molti altri ancora. Per un elenco completo dei tipi di file supportati in modo nativo, vedere Informazioni incluse nell'indice.
L'indice può essere esteso con gestori di proprietà e filtri per esporre il contenuto e le proprietà dei nuovi formati di file all'indice e a Esplora risorse. I filtri sono un'implementazione dell'interfaccia IFilter . Esistono due tipi di filtri: uno che interagisce con singoli elementi, ad esempio file e uno che interagisce con contenitori come cartelle. I filtri sono multi-scopo in quanto supportano la suddivisione in blocchi di dati, il contenuto di testo, alcune proprietà e più lingue.
Al contrario, i gestori di proprietà hanno uno scopo più specifico: esporre le proprietà di tipi di file specifici identificati dalle estensioni di file. Un gestore di proprietà per un tipo di file può abilitare le proprietà get e impostare e può enumerare le proprietà associate a tale tipo di file. A differenza dei filtri, i gestori di proprietà non supportano il blocco dei dati o del contenuto di testo e i gestori di proprietà non possono indicare la lingua in cui si trova una proprietà di testo, a meno che non supportino la scrittura di proprietà.
Indicizzazione di un archivio dati
L'indice può essere esteso con i gestori di protocollo per fornire l'accesso agli archivi dati proprietari. Ad esempio, i file e gli elementi contenuti in archivi dati non di file system ,ad esempio database e archivi di posta elettronica, richiedono un gestore di protocollo per eseguire il mapping da un URL a un flusso. I gestori di protocollo possono anche determinare facoltativamente i filtri corretti da usare per estrarre informazioni da un flusso. I filtri enumerare gli URL dell'archivio dati. Gli elementi vengono quindi indicizzati singolarmente usando il filtro corretto e/o il gestore delle proprietà. Per altre informazioni, vedere Estensione dell'indice.
Gestione del processo di indicizzazione
Gli sviluppatori di applicazioni possono controllare l'ambito e la frequenza dell'indicizzazione di Windows Search usando varie interfacce di gestione. Queste interfacce includono funzionalità per aggiungere e rimuovere le directory che l'indicizzatore analizza le modifiche, notificare manualmente l'indice delle modifiche ai dati, controllare lo stato dell'indicizzatore e forzare la reindicizzazione di alcuni o tutti i dati. Per altre informazioni, vedere Gestione dell'indice.
Integrazione del sistema di proprietà Windows con le applicazioni di Windows Search
Windows Property System è un sistema estendibile di lettura/scrittura di definizioni di dati che fornisce un modo uniforme per esprimere i metadati sugli elementi della shell. Il sistema di proprietà Windows in Windows Vista e versioni successive consente di archiviare e recuperare i metadati per gli elementi della shell. Un elemento shell è un singolo contenuto, ad esempio un file, una cartella, un messaggio di posta elettronica o un contatto. Una proprietà è una singola parte di metadati associata a un elemento della shell. I valori delle proprietà vengono espressi come struttura PROPVARIANT.
Un elenco completo di proprietà comuni è incluso per diversi tipi di elementi comuni, ad esempio foto, musica, documenti, messaggi, contatti e file. Gli sviluppatori possono anche introdurre le proprie proprietà alla piattaforma se nessuna proprietà esistente soddisfa le proprie esigenze. Per altre informazioni sull'integrazione di applicazioni con il sistema di proprietà Windows, vedere Sviluppo di gestori di proprietà.
Panoramica dei gestori
Un gestore è un oggetto COM (Component Object Model) che fornisce funzionalità per un elemento shell. La maggior parte delle origini dati shell offre un sistema estendibile per l'associazione dei gestori agli elementi. Ad esempio, la cartella del file system usa il sistema di associazione per cercare i gestori per un particolare tipo di file. Per ogni tipo di file è necessario un gestore specifico. Per il tipo di file Adobe Acrobat .pdf è necessario un gestore di filtri, ad esempio un altro gestore di filtri per il formato di file .doc e così via.
I gestori diversi hanno una certa comunità. In Windows Vista e versioni successive, tutti i gestori devono usare una delle interfacce seguenti per inizializzare il gestore: IInitializeWithStream, IInitializeWithItem o IItinitializeWithFile.
La tabella seguente elenca le attività di sviluppo di alto livello, il tipo di gestore necessario per ogni attività e fornisce un collegamento alle informazioni concettuali su come eseguire ogni attività.
Attività | Gestore | Informazioni concettuali |
---|---|---|
Accesso alle proprietà di un file per l'indicizzazione | Gestore proprietà | Sviluppo di gestori di proprietà Proprietà definite dal sistema per i formati di file personalizzati |
Aggiunta di formati degli Appunti per l'oggetto dati (IDataObject) di un elemento (gli oggetti Dati vengono usati negli scenari di trascinamento della selezione e copia/incolla). | Gestore dell'oggetto dati | Creazione di gestori dati |
Aggiunta di verbi per un elemento comunemente visualizzato in un menu di scelta rapida | Gestore del menu di scelta rapida | Creazione di gestori di menu di scelta rapida Personalizzazione di un menu di scelta rapida tramite verbi dinamici |
Associazione di un tipo di file a un'icona specifica | Gestore icone | Creazione di gestori di icone |
Creazione di finestre delle proprietà con immagini e controlli dell'interfaccia utente che consentono l'interazione personalizzata con un tipo di file | Gestore della finestra delle proprietà | Gestori finestra delle proprietà |
Abilitazione di un tipo di elemento per supportare scenari di trascinamento della selezione e copia/incolla | Gestore di rilascio | Trasferimento di oggetti shell con trascinamento della selezione e appunti |
Estrazione di blocchi di proprietà di testo e documento per l'indicizzazione | Gestore filtri | Sviluppo di gestori di filtri |
Indicizzazione di un nuovo tipo di file | Gestore filtri, gestore proprietà | Sviluppo di gestori di filtri Sviluppo di gestori di proprietà |
Indicizzazione del contenuto di un archivio dati | Gestore di protocollo | Sviluppo di gestori di protocolli |
Anteprima di una visualizzazione semplificata dell'elemento shell nel riquadro di anteprima di Esplora risorse | Gestore di anteprima | Gestori di anteprima |
Specifica del testo popup quando un mouse passa il mouse su un oggetto dell'interfaccia utente | Gestore della finestra popup | Creazione di gestori dell'estensione shell (personalizzazione della descrizione informazioni) |
Specifica di un'immagine statica per rappresentare un elemento della shell | Gestore anteprime | Gestori di anteprime |
Nella tabella seguente sono elencati i gestori e le interfacce per l'implementazione di ogni tipo di gestore.
Gestore | Interfacce |
---|---|
Gestore di rilascio | IDropTarget, IDropTargetHelper, IPersistFile, IShellExtInit |
Gestore dell'oggetto dati | IDataObject, IPersistFile |
Gestore filtri | IFilter |
Gestore icone | IExtractIcon Facoltativo: IPersist, IPersistFile |
Gestore della finestra popup | IQueryInfo |
Gestore di anteprima | IPreviewHandler |
Gestore proprietà | IPropertyStore |
Gestore di protocollo | IFilter, ISearchProtocol, IUrlAccessor Facoltativo: ISearchProtocol2, IUrlAccessor2, IUrlAccessor3, IUrlAccessor4 |
Gestore della finestra delle proprietà | IShellExtInit, IShellPropSheetExt |
Gestore del menu di scelta rapida | IContextMenu, IExplorerCommand, IShellExtInit |
Gestore anteprime | IThumbnailProvider |
Nota
Un gestore di proprietà viene talvolta usata come gestore di metadati. Un'origine dati shell è talvolta nota come estensione dello spazio dei nomi shell. Un gestore dei tipi di file è talvolta noto come gestore di estensioni shell o estensione shell.
Per altre informazioni sulla creazione di gestori, vedere Creazione di gestori di estensione della shell. Per altre informazioni sulle proprietà, vedere Windows Property System.
Linee guida per il programma di installazione del componente aggiuntivo
Usare le linee guida seguenti per la creazione di un programma di installazione del componente aggiuntivo:
- Il programma di installazione deve usare il programma di installazione EXE o MSI.
- È necessario specificare le note sulla versione.
- È necessario creare una voce Installazione applicazioni per ogni componente aggiuntivo installato.
- Il programma di installazione deve assumere tutte le impostazioni del Registro di sistema per il tipo di file specifico o archiviare che il componente aggiuntivo corrente riconosce.
- Se un componente aggiuntivo precedente viene sovrascritto, il programma di installazione deve inviare una notifica all'utente.
- Se un componente aggiuntivo più recente ha sovrascritto un componente aggiuntivo precedente, l'utente deve essere in grado di ripristinare la funzionalità del componente aggiuntivo precedente e renderlo nuovamente il componente aggiuntivo predefinito per il tipo di file o l'archivio.
Nota per gli implementatori
Prima di creare un gestore di filtri o proprietà, gli sviluppatori devono considerare quanto segue:
- Questi gestori sono estensioni in-process caricate nei processi che non si controllano, ad esempio il processo del daemon di filtri, Esplora risorse (ricerca grep) e host di terze parti come Windows Mail.
- È necessario scrivere codice sicuro abbastanza affidabile per gestire forme arbitrarie danneggiate del formato di file creato per attaccare il sistema.
- Il componente aggiuntivo non deve perdere risorse che genereranno problemi per i processi host.
- Il componente aggiuntivo non deve arrestarsi in modo anomalo perché si arresta in modo anomalo anche i processi host e rallenta il processo di filtro.
- Poiché questi gestori vengono eseguiti in un processo di sistema in background, devono eseguire rapidamente con un minimo di CPU e I/O utilizzato per soddisfare i requisiti di prestazioni del sistema.
Di conseguenza, questi componenti aggiuntivi devono essere scritti dagli sviluppatori con esperienza nella creazione di codice a livello di sistema.
Risorse aggiuntive
- Per informazioni sulla creazione di un'origine dati shell, vedere Implementazione delle interfacce oggetto cartella di base.
- Per le origini dati che devono usare l'oggetto Visualizzazione cartella di sistema predefinita shell (DefView), vedere Implementazione di una visualizzazione cartelle, SHCreateShellFolderView e struttura SFV_CREATE. Le origini dati che usano l'oggetto Visualizzazione cartelle di sistema predefinita shell (DefView) devono implementare il set di interfacce seguenti: IShellFolder, IShellFolder2, IPersistFolder, IPersistFolder2 e (facoltativamente) IPersistFolder3. Se l'implementazione di IShellFolder non usa SHCreateShellFolderView per creare DefView, l'oggetto visualizzazione Shell potrebbe richiedere IFolderView.
- ISearchFolderItemFactory è l'interfaccia principale per i consumer dell'origine dati shell nota come DBFolder. Per altre informazioni su DBFolder, vedere la descrizione della costante STR_PARSE_WITH_PROPERTIES in Binding Context String Keys .For more information about DBFolder, see the description of the STR_PARSE_WITH_PROPERTIES constant in Bind Context String Keys. Vedere anche Association Arrays and IPropertySystem::GetPropertyDescriptionListFromString.See also Association Arrays and IPropertySystem::GetPropertyDescriptionListFromString.
- Per informazioni su OLE DB, vedere Panoramica della programmazione OLE DB. Per informazioni sul provider di dati .NET Framework per OLE DB, vedere la documentazione relativa allo spazio dei nomi System.Data.OleDb.
- Per le bacheche di messaggi supportate dalla community sulle tecnologie di ricerca, vedere Windows: Forum di ricerca.
- Per esempi di codice correlati, vedere Esempi di codice di Windows Search.
Argomenti correlati