Gestionnaires en préversion et hôte de préversion de l’interpréteur de commandes

Les gestionnaires d’aperçu sont appelés lorsqu’un élément est sélectionné pour afficher un aperçu léger, riche et en lecture seule du contenu du fichier dans le volet de lecture de l’affichage. Cela s’effectue sans lancer l’application associée du fichier.

Cette rubrique traite des rubriques suivantes :

Préversion de l’architecture du gestionnaire

Un gestionnaire de préversion est une application hébergée. Les hôtes incluent les Explorer Windows dans Windows Vista ou Microsoft Outlook 2007. Les hôtes implémentent IPreviewHandlerFrame comme méthode de communication entre le gestionnaire d’aperçu et l’hôte.

Le gestionnaire d’aperçu lui-même implémente les interfaces suivantes :

Votre gestionnaire est appelé via son IObjectWithSite, qui retourne un pointeur IUnknown via lequel vous demandez à un objet IPreviewHandlerFrame d’interagir avec l’hôte.

Options du modèle de serveur

Les gestionnaires d’aperçu sont toujours à court de processus. Il existe deux méthodes d’implémentation de ceci :

  1. Un gestionnaire de préversion peut être créé en tant que serveur in-process, mais s’exécuter via un hôte de substitution hors processus. Ceci est la méthode privilégiée. Le système fournit un hôte de substitution pour cela dans le fichier Prevhost.exe. Les gestionnaires en préversion créés par cette méthode ne sont pas compatibles avec Outlook 2007 sur Windows XP. Toutefois, ces mêmes gestionnaires fonctionnent dans Windows Explorer et Outlook 2007 s’exécutant sur Windows Vista.
  2. Un gestionnaire d’aperçu peut être créé en tant que serveur COM (Component Object Model) local. Cela n’est pas recommandé pour plusieurs raisons. Tout d’abord, l’implémentation d’un serveur in-process est plus facile. Plus important encore, l’implémentation en tant que serveur in-process offre un meilleur contrôle sur la durée de vie de l’objet gestionnaire, ce qui permet un meilleur nettoyage et une meilleure efficacité.

Par défaut, les gestionnaires d’aperçu s’exécutent dans un processus de faible niveau d’intégrité (IL) pour des raisons de sécurité. Vous pouvez éventuellement désactiver l’exécution en tant que processus d’IL faible en définissant la valeur suivante dans le Registre. Toutefois, il n’est pas recommandé de le faire. Les systèmes peuvent éventuellement être configurés pour rejeter tout processus qui n’est pas faible taux d’authentification interne.

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

Différents gestionnaires d’aperçu partagent le même processus par défaut. Deux instances de Prevhost.exe peuvent s’exécuter simultanément ; un pour les gestionnaires s’exécutant en tant que processus d’AUTHENTIFICATION faible, un pour les gestionnaires qui ont choisi de ne pas utiliser ce comportement.

Initialisation

Comme pour les gestionnaires de miniatures et de propriétés, il est vivement recommandé d’initialiser votre gestionnaire avec un flux. Vous pouvez initialiser via un fichier ou un élément si nécessaire, mais les flux fournissent le moyen le plus sécurisé d’implémenter un gestionnaire. L’initialisation via un flux garantit l’intégrité du fichier et les avantages en matière de stabilité pour le système d’exécution du gestionnaire en tant que processus d’AUTHENTIFICATION faible, par exemple la protection du système contre les dépassements de mémoire tampon, la limitation de l’emplacement où un gestionnaire peut écrire des informations et la limitation de la communication avec d’autres fenêtres.

Si vous devez initialiser avec un fichier ou un élément Shell, stockez le chemin du fichier ou une référence à IShellItem. Ne lisez pas les données de ces sources tant que IPreviewHandler::D oPreview n’est pas appelé.

En général, l’initialisation ne doit pas effectuer de travail lourd, comme la composition et le stockage d’une image d’aperçu. Pour une efficacité optimale, ce type de traitement ne doit pas être effectué tant que l’aperçu n’est pas demandé.

Data Flow de gestionnaire en préversion

Le flux de données dans le processus d’aperçu suit le chemin d’accès général indiqué ici. L’hôte peut être considéré comme windows Explorer dans Windows Vista ou Outlook 2007.

  1. Le gestionnaire d’aperçu est initialisé, de préférence avec un flux.
  2. La fenêtre d’affichage est passée de l’hôte au gestionnaire via IPreviewHandler::SetWindow.
  3. À ce stade, le gestionnaire ne doit rien faire de plus tant que IPreviewHandler::D oPreview n’est pas appelé.
  4. L’aperçu s’affiche dans le volet de lecture via un appel à IPreviewHandler::D oPreview.
  5. La taille de la fenêtre est définie via IPreviewHandler::SetRect.
  6. La fenêtre est redimensionnée si nécessaire via IPreviewHandler::SetRect.
  7. La préversion est déchargée et ses ressources libérées lorsqu’elle n’est plus nécessaire, par le biais d’un appel à IPreviewHandler::Unload.

Débogage d’un gestionnaire d’aperçu

Si vous avez suivi les recommandations pour implémenter votre gestionnaire d’aperçu en tant que serveur in-process, pour déboguer votre gestionnaire d’aperçu, vous pouvez attacher à Prevhost.exe. Comme mentionné précédemment, sachez qu’il peut y avoir deux instances de Prevhost.exe, une pour les processus d’AUTHENTIFICATION faible normaux et l’autre pour les gestionnaires qui ont choisi de ne pas s’exécuter en tant que processus d’AUTHENTIFICATION faible.

Si vous ne trouvez pas Prevhost.exe dans votre liste de processus disponibles, il n’a probablement pas été chargé à ce stade. Cliquer sur un fichier pour une préversion charge le substitut et il doit alors apparaître comme un processus attachable.

Fourniture de votre propre processus pour un gestionnaire en préversion

Si vous souhaitez forcer la création d’un nouveau processus pour votre gestionnaire au lieu de l’exécuter sous le processus par défaut, créez une sous-clé pour votre gestionnaire sous AppID et définissez son entrée DllSurrogate sur « Prevhost.exe ». Utilisez cette sous-clé AppID au lieu de la Prevhost.exe AppID par défaut.

En fournissant un nouveau processus, le gestionnaire peut éviter de s’exécuter sous un processus partagé, comme il le ferait par défaut. Cela peut vous permettre, par exemple, de vérifier la version spécifique du Common Language Runtime (CLR) dans le processus. Cela est obligatoire si vous créez une implémentation managée d’un gestionnaire d’aperçu.

Notes

Les gestionnaires de préversion 32 bits doivent utiliser AppID {534A1E02-D58F-44f0-B58B-36CBED287C7C} lorsqu’ils sont installés sur des systèmes d’exploitation 64 bits.

 

Génération de gestionnaires en préversion

Comment inscrire un gestionnaire en préversion

Instructions relatives aux gestionnaires en préversion