Freigeben über


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

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

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:

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.

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

Übersicht über Windows Search

Von Windows Search unterstützte Sprachen

Verwenden von verwaltetem Code mit Shelldaten und Windows Search

Handbuch für Windows Search-Entwickler