2009-03-08 8 views
0

Ich habe eine Windows Shell-Erweiterung mit ATL (Visual Studio 2008) erstellt. Es hat die folgenden Module und jedes Modul ist ein separates ATL Simple Object mit einem eigenen RGS für Registrierungsdatei: -Problem beim Debuggen der Shell-Erweiterung in Vista (IShellFolder)

  1. IShellFolder/IShellView -> Für ein virtuelles Laufwerk in Windows Explorer
  2. IContextMenu/IShellExtInit -> für ein Popup-Menü Dateien und Ordner
  3. IShellIconOverlayIdentifier - in Datei & Ordnereigenschaften
> für eine benutzerdefinierte Eigenschaft Seite - Overlay-Symbole für Dateien und Ordner
  • IShellPropSheetExt/IShellExtInit anzuzeigen

    Das obige funktioniert gut in WinXP und ich bin in der Lage, diese Shell-Erweiterung in WinXP debuggen. Aber sobald ich auf Vista umschalte, bekomme ich nur Methodenaufrufe für (2) und (4). Das Laufwerk wird in Windows Explorer erstellt, aber die zugrunde liegenden Methoden werden nicht aufgerufen, wenn ich darauf klicke. Wenn ich mit der rechten Maustaste klicke, wird ich aufgerufen (2) und wenn ich "Eigenschaften" für eine Datei oder einen Ordner wähle, bekomme ich den Code für (4).

    Gibt es eine Schnittstelle, die ich vermisse für (1) und (3) auf Vista. Ich konnte keine vollständige und detaillierte Dokumentation zum Schreiben von Shell Extensions für Vista auf MSDN finden. Ich hatte die CodeProject-Artikel bereits über Shell-Erweiterungen gelesen.

  • Antwort

    0

    Stellen Sie sicher, dass Ihre Erweiterungen die Initialisierung ordnungsgemäß verarbeiten, andernfalls wird die Erweiterung nicht von der Datei verclsid.exe geladen. verclsid.exe lädt zunächst die Shell-Erweiterungen und überprüft sie schnell, bevor ein 'OK' an die Shell gesendet wird, was anzeigt, dass die Erweiterung sicher geladen werden kann.

    Weitere Details zu verclsid.exe finden Sie unter here.

    +0

    ich nicht ganz konnte die Lösung richtig. Ich habe die verclsid.exe in die "Allowed" Liste der Firewall eingefügt, aber wenn ich mit dem Debuggen beginne, wird 'explorer.exe' angezeigt: Geladen '... \ Debug \ ShellExtension.dll' 'explorer.exe': Unloaded '.. . \ Debug \ ShellExtension.dll ' Und der Haltepunkt wird nicht getroffen – A9S6

    +0

    Es hat nichts mit einer Firewall zu tun. Es sei denn, Sie tun einige Netzwerk-Sachen in Ihrer DLL-Init-Funktion (die Sie * nie * tun sollten). die "(un) loaded" Zeilen im Debug-Fenster helfen hier nicht. Sie können Ihre Init-Funktionen einchecken, in welchen Prozess die DLL geladen wird. – Stefan

    +0

    Ich entschuldige mich für die späte Antwort, ich war weg. Mit Init-Funktion meinst du dllmain()? Dort mache ich nicht viel :: CoInitialize (NULL); if (dwReason == DLL_PROCESS_ATTACH) { _AtlModule.Init(); :: DisableThreadLibraryCalls (hInstance); } hInstance; Rückgabe _AtlModule.DllMain (dwReason, lpReserved); – A9S6

    Verwandte Themen