Windows Search als Entwicklungsplattform
Um den Inhalt und die Eigenschaften neuer Dateiformate und Datenspeicher zu indizieren, muss Microsoft Windows Search mit Add-Ins erweitert werden.
Bevor ein externer Entwickler neuer Dateiformate und Datenspeicher dafür sorgen kann, dass diese Formate und Speicher in Abfrageergebnissen in Windows Explorer angezeigt werden, muss er die folgenden drei Schritte ausführen:
- Implementieren Sie eine Shell-Datenquelle, um den Shell-Namespace zu erweitern.
- Machen Sie Elemente in einem Datenspeicher verfügbar (wenn sie einen neuen Datenspeicher hinzufügen, da dieser indiziert werden muss).
- Entwickeln Sie einen Protokollhandler, damit Windows Search auf die Daten für die Indizierung zugreifen kann.
Dieses Thema ist wie folgt organisiert:
- Erste Schritte
- Übersicht über Suchentwicklungsszenarien
- Übersicht über Handler
- Richtlinien für das Add-In-Installationsprogramm
- Hinweis für Implementierer
- Weitere Ressourcen
- Verwandte Themen
Erste Schritte
Bevor Sie mit dem Erstellen einer Windows Search-Anwendung beginnen, denken Sie daran, dass die bevorzugte Methode dafür die Verwendung einer Shell-Datenquelle ist. Eine Shell-Datenquelle erweitert den Shell-Namespace und macht die Elemente in einem Datenspeicher verfügbar. Die Elemente im Datenspeicher können dann vom Windows Search-System mithilfe eines Protokollhandlers indiziert werden. Dieser indirekte Ansatz für den Zugriff auf Windows Search durch die Implementierung einer Shell-Datenquelle wird bevorzugt, da er Zugriff auf vollständige Shell-Funktionen bietet. Auf diese Weise wird angemessener Benutzerkomfort gewährleistet.
Wenn die Abfrageergebnisse im Windows-Explorer angezeigt werden sollen, müssen Sie eine Shell-Datenquelle implementieren, bevor Sie einen Protokollhandler erstellen können, um den Index zu erweitern. Wenn jedoch alle Abfragen programmgesteuert sind (z. B. über OLE DB) und vom Code der Anwendung und nicht von der Shell interpretiert werden, wird ein Shell-Namespace weiterhin bevorzugt, ist aber nicht erforderlich.
Ein Protokollhandler ist für Windows erforderlich, um Wissen über Dateiinhalte zu erlangen, z. B. Elemente in Datenbanken oder benutzerdefinierte Dateitypen. Windows Search kann zwar den Namen und die Eigenschaften der Datei indizieren, Windows hat jedoch keine Kenntnis über den Inhalt der Datei. Daher können solche Elemente nicht indiziert oder in der Windows-Shell verfügbar gemacht werden. Durch die Implementierung eines benutzerdefinierten Protokollhandlers können Sie diese Elemente verfügbar machen. Eine Liste der Handler, die durch das Entwicklerszenario identifiziert werden, das Sie erreichen möchten, finden Sie unter Übersicht über Handler.
Übersicht über Suchentwicklungsszenarien
Die häufigsten Entwicklungsszenarien bei Windows Search sind:
- Hinzufügen eines neuen Datenspeichers
- Hinzufügen eines neuen Dateiformats
- Verwenden von Windows Search-Ergebnissen
Hinzufügen eines neuen Datenspeichers
Sie benötigen einen Shell-Datenspeicher für Windows Search nur dann, wenn Sie einen neuen Datenspeicher hinzufügen, der indiziert werden soll. Ein Datenspeicher ist ein Repository mit Daten, die mithilfe einer Shell-Datenquelle als Container für das Shell-Programmiermodell verfügbar gemacht werden können. Die Elemente in einem Datenspeicher können dann vom Windows Search-System mithilfe eines Protokollhandlers indiziert werden. Der Protokollhandler implementiert das Protokoll für den Zugriff auf eine Inhaltsquelle im systemeigenen Format. Die ISearchProtocol- und ISearchProtocol2-Schnittstellen werden verwendet, um einen benutzerdefinierten Protokollhandler zu implementieren, um die Datenquellen, die indiziert werden können, zu erweitern. Informationen zum Erstellen einer Shelldatenquelle finden Sie unter Implementieren der grundlegenden Ordnerobjektschnittstellen.
Hinzufügen eines neuen Dateiformats
Wenn Sie ein neues benutzerdefiniertes Dateiformat hinzufügen, müssen Sie entweder einen Filterhandler oder einen Eigenschaftenhandler entwickeln, aber nicht beides. Ein Filter ist eine Implementierung der IFilter-Schnittstelle. Er öffnet Dateien eines bestimmten Dateityps und filtert Eigenschaften und Textblöcke für den Indexer. Filter sind Dateitypen zugeordnet, die durch Dateinamenerweiterungen, MIME-Typen oder Klassenbezeichner (CLSIDs) gekennzeichnet sind. Obwohl ein Filter mehrere Dateitypen verarbeiten kann, funktioniert jeder Dateityp nur mit einem einzigen Filter.
Ein Eigenschaftenhandler übersetzt Daten, die in einer Datei gespeichert sind, in ein strukturiertes Schema, das von Windows Explorer, Windows Search und anderen Anwendungen erkannt wird und für sie zugänglich ist. Diese Systeme können dann mit dem Eigenschaftenhandler interagieren, um Eigenschaften in und aus einer Datei zu schreiben und zu lesen. Die übersetzten Daten beinhalten Detailansicht, Infotipps, Detailbereich, Eigenschaftenseiten usw. Jeder Eigenschaftenhandler ist einem bestimmten Dateityp zugeordnet, der durch die Dateinamenerweiterung identifiziert wird. Sie benötigen einen Eigenschaftenhandler, um Folgendes zu tun:
- Anzeigen nicht indizierter Elementeigenschaften auf der Benutzeroberfläche.
- Unterstützen des Schreibens von Eigenschaften.
Verwenden von Windows Search-Ergebnissen
In den folgenden Abschnitten werden verschiedene Möglichkeiten zum Verwenden von Windows Search-Ergebnissen beschrieben:
- Abfragen von Daten
- Abfragen von Remotedatenspeichern (Verbundsuche)
- Indizieren von Dateien und Elementen
- Indizieren eines Datenspeichers
- Verwalten des Indizierungsprozesses
- Integrieren des Windows Property-Systems in Windows Search-Anwendungen
Abfrage von Daten
Entwickler, die Anwendungen über dem kombinierten Windows Search- und Windows Property-System schreiben, können unabhängig vom Anwendungs- oder Dateityp auf Dateien und Elemente zugreifen. Es gibt zwei Möglichkeiten für Anwendungen, auf die Indexerdaten zuzugreifen:
- Anwendungen kommunizieren direkt mit OLE DB, indem Sie Windows Search Structured Query Language (SQL)-Abfragen an den Windows Search OLE DB-Anbieter senden, um Ergebnisse abzurufen. Abfragen können manuell oder mithilfe der ISearchQueryHelper-Schnittstelle erstellt werden, um die SQL aus Suchstichwörtern und der erweiterten Abfragesyntax (Advanced Query Syntax, AQS) zu generieren.
- Anwendungen funktionieren über die Shell-Ebene. Der Vorteil der Shell-Ebene besteht darin, dass sie auch andere Quellen wie etwa Grep unterstützt. Ein Nachteil besteht jedoch darin, dass nicht alle Indexer-Features verfügbar sind.
Eine weitere Option ist die Verwendung der Protokolle search-ms:// und search://, die URL-basierte Suchvorgänge durchführen, die über Windows Explorer gerendert werden. Diese Option ermöglicht eine problemlose Entwicklung, gibt aber keine Ergebnisse oder Benutzerauswahlen aus der Ergebnisansicht an die aufrufende Anwendung zurück. Ebenso wie bei anderen Protokollen können Suchanwendungen von Drittanbietern die Protokolle search-ms:// und search:// übernehmen, wenn die Anwendungen dem erforderlichen Featuresatz entsprechen. Weitere Informationen zu Abfragen finden Sie unter Abfrageprozess in Windows Search und Programmgesteuertes Abfragen des Indexes.
Abfragen von Remotedatenspeichern (Verbundsuche)
Unter Windows 7 und höher bietet die Verbundsuche einen neuen Suchanbieter, der Remotedatenspeicher über Webserver, über das OpenSearch-Protokoll abfragt und die Ergebnisse als RSS- oder Atom-XML-Feeds präsentiert. Search Connectors sind Namespaceverbindungen, die das Ordnerverhalten mithilfe eines Suchanbieters simulieren. Weitere Informationen zum Suchverbund zu Remotedatenspeichern unter Windows 7 finden Sie unter Verbundsuche in Windows.
Indizieren von Dateien und Elementen
Der Inhalt, der indiziert wird, basiert auf den Datei- und Datentypen, die durch Add-Ins in Windows Search unterstützt werden, sowie die standardmäßigen Einschluss- und Ausschlussregeln für Ordner im Dateisystem. Beispielsweise unterstützen die in Windows Search enthaltenen Filter mehr als 200 gängige Datentypen, einschließlich Microsoft Office-Dokumente, Microsoft Outlook-E-Mail (in Verbindung mit dem MAPI-Protokollhandler), Nur-Text-Dateien, HTML und viele mehr. Eine vollständige Liste der nativ unterstützten Dateitypen finden Sie unter Was ist im Index enthalten?.
Der Index kann mit Eigenschaftenhandlern und Filtern erweitert werden, um den Inhalt und die Eigenschaften neuer Dateiformate für den Index und Windows Explorer verfügbar zu machen. Filter sind eine Implementierung der IFilter-Schnittstelle. Es gibt zwei Arten von Filtern: eine, die mit einzelnen Elementen wie Dateien interagiert, und eine, die mit Containern wie Ordnern interagiert. Filter erfühlen mehrere Zwecke und unterstützen Datenabschnitte, Textinhalte, einige Eigenschaften und mehrere Sprachen.
Im Gegensatz dazu haben Eigenschaftenhandler einen spezifischeren Zweck: Sie machen die Eigenschaften bestimmter Dateitypen verfügbar, die durch Dateinamenerweiterungen identifiziert werden. Ein Eigenschaftenhandler für einen Dateityp kann das Abrufen und Festlegen von Eigenschaften aktivieren und die Eigenschaften präsentieren, die diesem Dateityp zugeordnet sind. Im Gegensatz zu Filtern unterstützen Eigenschaftenhandler das Chunking von Daten oder Textinhalten nicht, und Eigenschaftenhandler haben keine Möglichkeit, anzugeben, in welcher Sprache eine Texteigenschaft enthalten ist, es sei denn, sie unterstützen das Schreiben von Eigenschaften.
Indizieren eines Datenspeichers
Der Index kann mit Protokollhandlern erweitert werden, um Zugriff auf proprietäre Datenspeicher zu ermöglichen. Beispielsweise erfordern Dateien und Elemente, die in Nicht-Dateisystem-Datenspeichern (z. B. Datenbanken und E-Mail-Speichern) enthalten sind, einen Protokollhandler für die Zuordnung von einer URL zu einem Datenstrom. Protokollhandler können optional auch die korrekten Filter bestimmen, die zum Extrahieren von Informationen aus einem Datenstrom verwendet werden sollen. Filter präsentieren die Datenspeicher-URLs. Die Elemente werden dann einzeln mithilfe des korrekten Filter- und/oder Eigenschaftenhandlers indiziert. Weitere Informationen finden Sie unter Erweitern des Indexes.
Verwalten des Indizierungsprozesses
Anwendungsentwickler können den Umfang und die Häufigkeit der Windows Search-Indizierung mithilfe verschiedener Management-Schnittstellen steuern. Zu diesen Schnittstellen gehören Funktionen zum Hinzufügen und Entfernen der Verzeichnisse, die der Indexer nach Änderungen durchsucht, zur manuellen Benachrichtigung des Index über Änderungen an Daten, zum Überprüfen des Status des Indexers und zum Erzwingen der erneuten Indizierung einiger oder aller Daten. Weitere Informationen finden Sie unter Verwalten des Index.
Integrieren des Windows Property-Systems in Windows Search-Anwendungen
Das Windows Property-System ist ein erweiterbares Lese-/Schreibsystem mit Datendefinitionen, das eine einheitliche Methode zum Ausdrücken von Metadaten zu Shell-Elementen bietet. Mit dem Windows Property-System unter Windows Vista und höher können Sie Metadaten für Shell-Elemente speichern und abrufen. Ein Shell-Element ist ein beliebiger Inhalt, z. B. eine Datei, ein Ordner, eine E-Mail oder ein Kontakt. Eine Eigenschaft besteht aus Metadaten, die einem Shell-Element zugeordnet sind. Eigenschaftswerte werden als PROPVARIANT-Struktur ausgedrückt.
Eine umfangreiche Liste allgemeiner Eigenschaften ist für eine Reihe gängiger Elementtypen wie Fotos, Musik, Dokumente, Nachrichten, Kontakte und Dateien enthalten. Entwickler können auch eigene Eigenschaften auf der Plattform einführen, wenn keine vorhandene Eigenschaft ihren Anforderungen entspricht. Weitere Informationen zum Integrieren von Anwendungen in das Windows Property-System finden Sie unter Entwickeln von Eigenschaftenhandlern.
Übersicht über Handler
Ein Handler ist ein COM-Objekt (Component Object Model), das Funktionen für ein Shellelement bereitstellt. Die meisten Shell-Datenquellen bieten ein erweiterbares System zum Binden von Handlern an Elemente. Beispielsweise verwendet der Dateisystemordner das Zuordnungssystem, um die Handler für einen bestimmten Dateityp zu finden. Für jeden Dateityp ist ein bestimmter Handler erforderlich. So ist etwa ein Filterhandler für den Dateityp Adobe Acrobat .pdf erforderlich, ein anderer Filterhandler für das .doc-Dateiformat usw.
Verschiedene Handler weisen einige Gemeinsamkeiten auf. Unter Windows Vista und höher müssen alle Handler eine der folgenden Schnittstellen für die Initialisierung verwenden: IInitializeWithStream, IInitializeWithItem oder IItinitializeWithFile.
In der folgenden Tabelle sind allgemeine Entwickleraufgaben, der Typ des Handlers, der für jede Aufgabe erforderlich ist sowie Links zu konzeptionellen Informationen zur Ausführung der einzelnen Aufgaben aufgeführt.
Aufgabe | Handler | Konzeptionelle Informationen |
---|---|---|
Zugreifen auf die Eigenschaften einer Datei zur Indizierung | Eigenschaftenhandler | Entwickeln von Eigenschaftenhandlern Systemdefinierte Eigenschaften für benutzerdefinierte Dateiformate |
Hinzufügen von Zwischenablageformaten für das Datenobjekt (IDataObject) eines Elements (Datenobjekte werden in Drag-and-drop- und Kopier-/Einfügeszenarien verwendet.) | Datenobjekthandler | Erstellen von Datenhandlern |
Hinzufügen von Verben für ein Element, das typischerweise in einem Kontextmenü angezeigt wird | Kontextmenühandler | Erstellen von Kontextmenühandlern Anpassen eines Kontextmenüs mithilfe von dynamischen Verben |
Zuordnen eines Dateityps zu einem bestimmten Symbol | Symbolhandler | Erstellen von Symbolhandlern |
Erstellen von Eigenschaftenblättern mit UI-Bildern und Steuerelementen, die die benutzerdefinierte Interaktion mit einem Dateityp ermöglichen | Eigenschaftenblatthandler | Eigenschaftenblatthandler |
Aktivieren eines Elementtyps zur Unterstützung von Drag-and-drop- und Kopier-/Einfügeszenarien | Drophandler | Ausführliche Informationen finden Sie unter Übertragen von Shell-Objekten per Drag-and-drop und Zwischenablage. |
Extrahieren von Textteilen und Dokumenteigenschaften für die Indizierung | Filterhandler | Entwickeln von Filterhandlern |
Indizieren eines neuen Dateityps | Filterhandler, Eigenschaftenhandler | Entwickeln von Filterhandlern Entwickeln von Eigenschaftenhandlern |
Indizieren des Inhalts eines Datenspeichers | Protokollhandler | Entwickeln von Protokollhandlern |
Voranzeige einer vereinfachten Ansicht des Shell-Elements im Vorschaufenster von Windows Explorer | Vorschauhandler | Vorschauhandler |
Bereitstellen von Popup-Text, wenn ein Mauszeiger auf ein UI-Objekt bewegt wird | QuickInfo-Handler | Erstellen von Shell-Erweiterungshandlern (Infotipp-Anpassung) |
Bereitstellen eines statischen Bilds zur Darstellung eines Shell-Elements | Vorschauminiaturhandler | Vorschauminiaturhandler |
In der folgenden Tabelle sind Handler und die Schnittstellen für die Implementierung der einzelnen Handlertypen aufgeführt.
Handler | Schnittstellen |
---|---|
Drophandler | IDropTarget, IDropTargetHelper, IPersistFile, IShellExtInit |
Datenobjekthandler | IDataObject, IPersistFile |
Filterhandler | IFilter |
Symbolhandler | IExtractIcon Optional: IPersist, IPersistFile |
QuickInfo-Handler | IQueryInfo |
Vorschauhandler | IPreviewHandler |
Eigenschaftenhandler | IPropertyStore |
Protokollhandler | IFilter, ISearchProtocol, IUrlAccessor Optional: ISearchProtocol2, IUrlAccessor2, IUrlAccessor3, IUrlAccessor4 |
Eigenschaftenblatthandler | IShellExtInit, IShellPropSheetExt |
Kontextmenühandler | IContextMenu, IExplorerCommand, IShellExtInit |
Vorschauminiaturhandler | IThumbnailProvider |
Hinweis
Ein Eigenschaftenhandler wird manchmal auch als Metadatenhandler bezeichnet. Eine Shell-Datenquelle wird manchmal als Shell-Namespaceerweiterung bezeichnet. Ein Dateityphandler wird manchmal auch als Shell-Erweiterungshandler oder Shell-Erweiterung bezeichnet.
Weitere Informationen zum Erstellen von Handlern finden Sie unter Erstellen von Shell-Erweiterungshandlern. Weitere Informationen zu Eigenschaften finden Sie unter Windows Property-System.
Richtlinien für das Add-In-Installationsprogramm
Befolgen Sie beim Erstellen eines Add-In-Installationsprogramms die folgenden Richtlinien:
- Das Installationsprogramm muss entweder das EXE- oder das MSI-Installationsprogramm verwenden.
- Es müssen Versionshinweise bereitgestellt werden.
- Für jedes installierte Add-In muss ein Eintrag Programme hinzufügen/entfernen erstellt werden.
- Das Installationsprogramm muss alle Registrierungseinstellungen für den jeweiligen Dateityp oder Speicher übernehmen, den das aktuelle Add-In versteht.
- Wenn ein älteres Add-In überschrieben wird, sollte das Installationsprogramm die Benutzer*innen darüber informieren.
- Wenn ein neueres Add-In ein vorheriges Add-In überschrieben hat, sollte der Benutzer in der Lage sein, die Funktionalität des vorherigen Add-Ins wiederherzustellen und es wieder zum Standard-Add-In für diesen Dateityp oder Speicher zu machen.
Hinweis für Implementierer
Vor dem Erstellen eines Filter- oder Eigenschaftenhandlers sollten Entwickler Folgendes berücksichtigen:
- Diese Handler sind prozessinterne Erweiterungen, die in Prozesse geladen werden, die Sie nicht steuern, z. B. den Filter Daemon-Prozess, Windows Explorer (Grep-Suche) und Drittanbieterhosts wie Windows Mail).
- Sie müssen sicheren Code schreiben, der robust genug ist, um willkürlich beschädigte Formen Ihres Dateiformats zu behandeln, die zum Angriff auf das System erstellt wurden.
- Ihr Add-In darf keine Ressourcen freigeben, die Probleme für die Hostprozesse verursachen.
- Ihr Add-In darf nicht abstürzen, da dies auch die Hostprozesse zum Absturz bringt und den Filtervorgang verlangsamt.
- Da diese Handler in einem Hintergrundsystemprozess ausgeführt werden, müssen sie schnell mit einem Minimum an CPU und E/A ausgeführt werden, um die Leistungsanforderungen des Systems zu erfüllen.
Daher sollten diese Add-Ins von Entwicklern mit guten Kenntnissen beim Erstellen von Code auf Systemebene geschrieben werden.
Weitere Ressourcen
- Informationen zum Erstellen einer Shelldatenquelle finden Sie unter Implementieren der grundlegenden Ordnerobjektschnittstellen.
- Informationen zu Datenquellen, die das Shell Default System Folder View Object (DefView) verwenden müssen, finden Sie unter Implementieren einer Ordneransicht, SHCreateShellFolderView-Funktion und SFV_CREATE-Struktur. Datenquellen, die das Shell Default System Folder View Object (DefView) verwenden, müssen den folgenden Satz von Schnittstellen implementieren: IShellFolder, IShellFolder2, IPersistFolder, IPersistFolder2 und (optional) IPersistFolder3. Wenn Ihre IShellFolder-Implementierung nicht SHCreateShellFolderView zum Erstellen von DefView verwendet, benötigt das Shell-Anzeigeobjekt möglicherweise IFolderView.
- ISearchFolderItemFactory ist die primäre Schnittstelle für Nutzer der Shell-Datenquelle, die als DBFolder bezeichnet wird. Weitere Informationen zu DBFolder finden Sie in der Beschreibung der Konstante STR_PARSE_WITH_PROPERTIES in Binden von Kontextzeichenfolgen-Schlüsseln. Siehe auch Zuordnungsbereiche und IPropertySystem::GetPropertyDescriptionListFromString.
- Informationen zu OLE DB finden Sie unter OLE DB-Programmierübersicht. Informationen zum .NET Framework-Datenanbieter für OLE DB finden Sie in der Dokumentation zum System.Data.OleDb-Namespace.
- Informationen zu von der Community unterstützten Message Boards zu Search-Technologien finden Sie unter Windows: Search-Foren.
- Verwandte Codebeispiele finden Sie unter Windows Search-Codebeispiele.
Zugehörige Themen