2009-03-08 6 views
0

J'ai créé une extension Windows Shell en utilisant ATL (Visual Studio 2008). Il comprend les modules suivants et chaque module est un séparé Objet simple ATL avec ses propres .rgs fichier d'enregistrement: -Problème de débogage de l'extension shell dans Vista (IShellFolder)

  1. IShellFolder/IShellView -> Pour un lecteur virtuel dans l'explorateur Windows
  2. IContextMenu/IShellExtInit -> pour un fichier de menu contextuel et des dossiers
  3. IShellIconOverlayIdentifier - pour afficher les icônes de superposition sur les fichiers et les dossiers
  4. IShellPropSheetExt/IShellExtInit -> pour une page de propriété personnalisée dans le fichier & propriétés du dossier

Le travail ci-dessus fonctionne bien dans WinXP et je suis en mesure de déboguer cette extension shell dans WinXP. Mais dès que je passe à Vista, je reçois seulement des appels de méthode pour (2) et (4). Le lecteur est créé dans l'Explorateur Windows mais les méthodes sous-jacentes ne sont pas appelées lorsque je clique dessus. Bien que lorsque je clique avec le bouton droit, je reçois un appel pour (2) et lorsque je sélectionne "Propriétés" pour un fichier ou un dossier, j'obtiens le code pour (4).

Y at-il une interface qui me manque pour (1) et (3) sur Vista. Je ne pouvais pas trouver une documentation complète et détaillée sur l'écriture de Shell Extensions pour Vista sur MSDN. J'avais déjà parcouru les articles de CodeProject sur les extensions shell.

Répondre

0

Assurez-vous que vos extensions gèrent l'initialisation correctement, sinon verclsid.exe ne laissera pas charger votre extension. Verclsid.exe charge d'abord les extensions shell et les vérifie rapidement avant d'envoyer un 'ok' au shell indiquant qu'il est sûr de charger l'extension.

Voir here pour des informations sur verclsid.exe.

+0

Je ne pouvais pas tout à fait obtenir la bonne solution. J'ai inclus le verclsid.exe dans la liste "Allowed" du pare-feu, mais quand je commence le débogage, il montre 'explorer.exe': Loaded '... \ Debug \ ShellExtension.dll' 'explorer.exe': Déchargé '.. \ Debug \ ShellExtension.dll ' Et le point d'arrêt n'est pas atteint – A9S6

+0

Cela n'a rien à voir avec un pare-feu. A moins que vous ne fassiez quelque chose de réseau dans votre fonction dll init (que vous * ne * devriez jamais faire). les lignes "(un) chargées" dans la fenêtre de débogage ne aident pas ici. Vous pouvez vérifier dans vos fonctions init dans quel processus la DLL est chargée. – Stefan

+0

Je m'excuse pour la réponse tardive, j'étais parti. Par fonction Init, voulez-vous dire dllmain()? Dans là, je ne fais pas beaucoup :: CoInitialize (NULL); if (dwReason == DLL_PROCESS_ATTACH) { _AtlModule.Init(); :: DisableThreadLibraryCalls (hInstance); } hInstance; return _AtlModule.DllMain (dwReason, lpReserved); – A9S6

Questions connexes