Vorschauhandler und Shell-Vorschauhost

Vorschauhandler werden aufgerufen, wenn ein Element ausgewählt wird, um eine einfache, umfassende, schreibgeschützte Vorschau des Dateiinhalts im Lesebereich der Ansicht anzuzeigen. Dies erfolgt, ohne die zugeordnete Anwendung der Datei zu starten.

In diesem Thema werden die folgenden Themen erläutert:

Vorschauhandlerarchitektur

Ein Vorschauhandler ist eine gehostete Anwendung. Hosts enthalten den Windows Explorer in Windows Vista oder Microsoft Outlook 2007. Hosts implementieren IPreviewHandlerFrame als Kommunikationsmethode zwischen dem Vorschauhandler und dem Host.

Der Vorschauhandler selbst implementiert diese Schnittstellen:

Ihr Handler wird über das IObjectWithSite-Objektaufgerufen, das einen IUnknown-Zeiger zurückgibt, über den Sie ein IPreviewHandlerFrame-Objekt für die Interaktion mit dem Host anfordern.

Servermodelloptionen

Für Vorschauhandler ist der Prozess immer nicht mehr verfügbar. Es gibt zwei Methoden, dies zu implementieren:

  1. Ein Vorschauhandler kann als Prozessserver erstellt, aber über einen Out-of-Process-Ersatzhost ausgeführt werden. Dies ist die bevorzugte Methode. Das System stellt einen Ersatzhost für diesen in der Prevhost.exe zurEntschlüsselung. Vorschauhandler, die von dieser Methode erstellt werden, sind nicht mit Outlook 2007 auf Windows XP kompatibel. Diese Handler funktionieren jedoch in Windows Explorer und Outlook 2007 unter Windows Vista.
  2. Ein Vorschauhandler kann als lokaler serverseitiger Component Object Model (COM) erstellt werden. Dies wird aus verschiedenen Gründen nicht empfohlen. Erstens ist die Implementierung eines Prozessservers einfacher. Noch wichtiger ist, dass die Implementierung als Prozessserver eine bessere Kontrolle über die Lebensdauer des Handlerobjekts bietet, was eine bessere Bereinigung und Effizienz ermöglicht.

Standardmäßig werden Vorschauhandler aus Sicherheitsgründen in einem Il-Prozess (Low Integrity Level) ausgeführt. Sie können die Ausführung optional als Prozess mit niedriger IL deaktivieren, indem Sie den folgenden Wert in der Registrierung festlegen. Dies wird jedoch nicht empfohlen. Systeme könnten schließlich so konfiguriert werden, dass alle Prozesse abgelehnt werden, die keine geringe IL sind.

HKEY_CLASSES_ROOT
   CLSID
      {YOUR HANDLER'S CLSID}
         DisableLowILProcessIsolation [DWORD] = 1

Verschiedene Vorschauhandler verwenden standardmäßig denselben Prozess. Zwei Instanzen von Prevhost.exe können gleichzeitig ausgeführt werden. einer für Handler, die als Low IL-Prozesse ausgeführt werden, einer für Handler, die sich von diesem Verhalten abgemeldet haben.

Initialisierung

Wie bei Miniaturansichts- und Eigenschaftshandlern wird dringend empfohlen, den Handler mit einem Stream zu initialisieren. Sie können bei Bedarf über eine Datei oder ein Element initialisieren, aber Streams bieten die sicherste Möglichkeit, einen Handler zu implementieren. Die Initialisierung über einen Stream stellt die Dateiintegrität und die Stabilitätsvorteile für das System sicher, bei dem der Handler als niedriger IL-Prozess ausgeführt wird, z. B. der Schutz des Systems vor Pufferüberläufen, das Einschränken, wo ein Handler Informationen schreiben kann, und das Einschränken der Kommunikation mit anderen Fenstern.

Wenn Sie mit einer Datei oder einem Shellelement initialisieren müssen, speichern Sie den Dateipfad oder einen Verweis auf IShellItem. Lesen Sie keine Daten aus diesen Quellen, bis IPreviewHandler::D oPreview aufgerufen wird.

Im Allgemeinen sollte die Initialisierung keine hohen Arbeitslasten wie das Erstellen und Speichern eines Vorschauimages haben. Um eine optimale Effizienz zu erzielen, sollte diese Art der Verarbeitung erst erfolgen, wenn die Vorschau aufgerufen wird.

Preview Handler Data Flow

Der Datenfluss im Vorschauprozess folgt dem hier gezeigten allgemeinen Pfad. Der Host kann als Windows Explorer in Windows Vista oder Outlook 2007 verwendet werden.

  1. Der Vorschauhandler wird initialisiert, vorzugsweise mit einem Stream.
  2. Das Ansichtsfenster wird vom Host über IPreviewHandler::SetWindowan den Handler übergeben.
  3. An diesem Punkt sollte der Handler nichts weiter tun, bis IPreviewHandler::D oPreview aufgerufen wird.
  4. Die Vorschau wird im Lesebereich durch einen Aufruf von IPreviewHandler::D oPreview angezeigt.
  5. Die Größe des Fensters wird über IPreviewHandler::SetRect festgelegt.
  6. Die Größe des Fensters wird bei Bedarf über IPreviewHandler::SetRect geändert.
  7. Die Vorschau wird entladen, und ihre Ressourcen werden freigegeben, wenn sie nicht mehr benötigt werden, durch einen Aufruf von IPreviewHandler::Unload.

Debuggen eines Vorschauhandlers

Wenn Sie die Empfehlungen zum Implementieren ihres Vorschauhandlers als Prozessserver befolgt haben, können Sie zum Debuggen des Vorschauhandlers an Prevhost.exe. Wie bereits erwähnt, sollten Sie beachten, dass es zwei Instanzen von Prevhost.exe geben kann: eine für normale Prozesse mit niedriger IL und eine für die Handler, die sich gegen die Ausführung als niedriger IL-Prozess entschieden haben.

Wenn Sie die Prevhost.exe in der Liste der verfügbaren Prozesse nicht finden, wurde sie wahrscheinlich zu diesem Zeitpunkt nicht geladen. Wenn Sie auf eine Datei für eine Vorschau klicken, wird das Ersatzzeichen geladen, und es sollte dann als anfingbarer Prozess angezeigt werden.

Bereitstellen eines eigenen Prozesses für einen Vorschauhandler

Wenn Sie die Erstellung eines neuen Prozesses für Ihren Handler erzwingen möchten, anstatt unter dem Standardprozess ausgeführt zu werden, erstellen Sie einen neuen Unterschlüssel für den Handler unter AppID, und legen Sie den DllSurrogate-Eintrag auf "Prevhost.exe" fest. Verwenden Sie diesen AppID-Unterschlüssel anstelle des Prevhost.exe AppID.

Durch die Bereitstellung eines neuen Prozesses kann der Handler vermeiden, dass er wie standardmäßig unter einem freigegebenen Prozess ausgeführt wird. Dadurch können Sie beispielsweise die spezifische Version der Common Language Runtime (CLR) im Prozess sicherstellen. Dies ist erforderlich, wenn Sie eine verwaltete Implementierung eines Vorschauhandlers erstellen.

Hinweis

32-Bit-Vorschauhandler sollten appID {534A1E02-D58F-44f0-B58B-36CBED287C7C} verwenden, wenn sie auf 64-Bit-Betriebssystemen installiert sind.

Erstellen von Vorschauhandlern

Registrieren eines Vorschauhandlers

Richtlinien für Vorschauhandler