Debuggen von Protokollhandlern
Beim Testen und Debuggen Ihrer Protokollhandlerimplementierungen ist es wichtig zu verstehen, wie Protokollhandler gestartet werden.
Dieses Thema ist wie folgt organisiert:
Debuggen von Protokollhandlern
Der SearchIndexer-Prozess (searchindexer.exe) startet eine Kopie des SearchProtocolHost-Prozesses (SearchProtocolHost.exe) im Systemkontext und eine weitere Kopie im Benutzerkontext. Anschließend werden die Protokollhandler nach Bedarf im SearchProtocolHost-Prozess geladen. Sie werden erst entladen, wenn der Suchdienst beendet wird. Dieselbe Instanz eines Protokollhandlers wird beliebig oft wiederverwendet, während der Dienst ausgeführt wird.
Die SearchIndexer- und SearchProtocolHost-Prozesse kommunizieren während der Indizierung häufig miteinander. Wenn Sie den SearchProtocolHost-Prozess zum Debuggen anhalten oder beenden, startet der SearchIndexer einen neuen SearchProtocolHost-Prozess, wodurch die Debugsitzung ungültig wird. Wenn Sie Ihren Debugger direkt an den SearchProtocolHost-Prozess anfügen, können Sie zudem die Handlevererbung von „searchindexer.exe“ an „searchprotocolhost.exe“ unterbrechen, sodass die beiden Prozesse nicht kommunizieren können.
Um diese Probleme zu vermeiden, müssen Sie den Suchdienst über den Debugvorgang benachrichtigen und den Debugger mit Anweisungen zum Debuggen untergeordneter Prozesse an den SearchIndexer-Prozess anfügen. Dies wird im nächsten Schritt beschrieben.
Einrichten des Debuggens
Führen Sie die folgenden Schritte aus, um das Debuggen für den Protokollhandler einzurichten.
Benachrichtigen Sie den Suchdienst über den Debugvorgang, indem Sie den Wert „DebugFilters“ in der Registrierung auf 1 festlegen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft Windows Search Gathering Manager DebugFilters = 1
Fügen Sie einen Debugger mithilfe des Registrierungsschlüssels „Image File Execution Options“ an:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion Image File Execution Options SearchIndexer.exe Debugger = <path to debugger> <debugger options>
Die Optionen für einen Beispieldebugger werden in der folgenden Tabelle beschrieben.
Beispiel mit dem ntsd-Debugger:Debugger = C:\debuggers\ntsd.exe -odGx -c: "sxe ld mydll.dll;g"
Starten Sie „searchindexer.exe“ unter dem Debugger neu, indem Sie compmgmt.msc, services.msc oder ein Befehlsfenster mit Befehlen wie den folgenden verwenden:
net stop wsearch <copy new DLLs for debugging> net start wsearch
Um zwischen einem im Systemkontext ausgeführten SearchProtocolHost-Prozess und einem im Benutzerkontext ausgeführten Prozess zu unterscheiden, können Sie die Umgebungszeichenfolgen überprüfen. Bei „ntsd.exe“ können Sie beispielsweise den Erweiterungsbefehl !peb verwenden, um eine formatierte Ansicht der Informationen im Prozessumgebungsblock (Process Environment Block, PEB) anzuzeigen.
Zusätzliche Ressourcen
- Informationen zum Erstellen von Handlern finden Sie unter Registrieren von Shellerweiterungshandlern.
Zugehörige Themen
Konzept
- Entwickeln von Protokollhandlern
- Grundlegendes zu Protokollhandlern
- Benachrichtigen des Indexes über Änderungen
- Hinzufügen von Symbolen und Kontextmenüs
- Codebeispiel: Shell-Erweiterungen für Protokollhandler
- Erstellen eines Suchconnectors für einen Protokollhandler
- Installieren und Registrieren von Protokollhandlern