Windows 在Vista(IShellFolder)中调试外壳程序扩展时出现问题

Windows 在Vista(IShellFolder)中调试外壳程序扩展时出现问题,windows,shell-extensions,Windows,Shell Extensions,我已经使用ATL(VisualStudio2008)创建了一个Windows Shell扩展。它具有以下模块,每个模块都是一个单独的ATL简单对象,具有自己的.rgs文件以进行注册:- IShellFolder/IShellView->用于windows资源管理器中的虚拟驱动器 IContextMenu/IShellExtInit->用于弹出菜单文件和文件夹 IShellIconOverlayIdentifier-在文件和文件夹上显示覆盖图标 IShellPropSheetText/IShell

我已经使用ATL(VisualStudio2008)创建了一个Windows Shell扩展。它具有以下模块,每个模块都是一个单独的ATL简单对象,具有自己的.rgs文件以进行注册:-

  • IShellFolder/IShellView->用于windows资源管理器中的虚拟驱动器
  • IContextMenu/IShellExtInit->用于弹出菜单文件和文件夹
  • IShellIconOverlayIdentifier-在文件和文件夹上显示覆盖图标
  • IShellPropSheetText/IShellExtInit->用于文件和文件夹属性中的自定义属性页
  • 以上在WinXP中工作良好,我能够在WinXP中调试这个shell扩展。但一切换到Vista,我就只得到(2)和(4)的方法调用。该驱动器是在Windows资源管理器中创建的,但单击它时不会调用底层方法。 虽然当我右键单击时,会调用(2),当我为文件或文件夹选择“属性”时,会进入(4)的代码


    是否有一些界面,我错过了(1)和(3)的Vista。我找不到在MSDN上为Vista编写Shell扩展的完整详细文档。我已经阅读了有关shell扩展的CodeProject文章。

    请确保您的扩展正确处理初始化,否则verclsid.exe将不允许加载您的扩展。 verclsid.exe首先加载外壳扩展,并在向外壳发送“ok”之前对其进行快速检查,以指示加载扩展是安全的


    有关verclsid.exe的详细信息,请参阅。

    问题是因为使用了Xml智能指针。当对它调用Release()时,它出现了问题

    检查此链接

    我不能完全正确地找到解决方案。我将verclsid.exe包括在防火墙的“允许”列表中,但当我开始调试时,它显示“explorer.exe”:已加载“…\Debug\ShellExtension.dll”“explorer.exe”:已卸载“…\Debug\ShellExtension.dll”,断点未命中。它与防火墙无关。除非您在dll init函数中执行一些网络操作(您永远不应该这样做)。“调试”窗口中的“(未加载)”行在这里没有帮助。您可以在加载dll的进程中检入您的init函数。很抱歉,回复太晚,我不在。你说的Init函数是指dllmain()?在这里,我没有做太多::CoInitialize(NULL);如果(dwReason==DLL_PROCESS_ATTACH){AtlModule.Init();::DisableThreadLibraryCalls(hInstance)}hInstance;返回_AtlModule.DllMain(dwReason,lpReserved);我怀疑IShellFolder和IPersistFolder是否是需要在Vista中实现的唯一接口。可能还有另一个必需的接口不仅仅是dllmain-verclsid还对QueryInterface()进行一些测试,这取决于它在其他一些接口上的扩展。否:Vista不要求实现任何不在XP上的接口。