关于Windows:问题在Vista中调试Shell扩展(IShellFolder)

Problem debugging shell extension in Vista (IShellFolder)

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

  • IShellFolder / IShellView->对于Windows资源管理器中的虚拟驱动器
  • IContextMenu / IShellExtInit->用于弹出菜单的文件和文件夹
  • IShellIconOverlayIdentifier-在文件和文件夹上显示覆盖图标
  • IShellPropSheetExt / IShellExtInit->对于"文件和文件夹"属性中的自定义属性页面
  • 以上在WinXP中可以正常工作,并且我可以在WinXP中调试此Shell扩展。但是,一旦我切换到Vista,我只会得到(2)和(4)的方法调用。该驱动器是在Windows资源管理器中创建的,但是单击该驱动器时不会调用其基础方法。
    尽管当我单击鼠标右键时,我会被要求(2),而当我为文件或文件夹选择"属性"时,我会进入(4)的代码。

    在Vista上是否缺少针对(1)和(3)的某些接口。我找不到有关在MSDN上编写Windows Vista的Shell Extensions的完整而详细的文档。我已经阅读了有关Shell扩展的CodeProject文章。


    问题是由于使用了Xml SMART Pointer。 调用Release()时出现问题。

    检查此链接
    调用MSXML2 :: IXMLDOMDocumentPtr-> Release()时Internet Explorer崩溃


    确保您的扩展正确处理了初始化,否则verclsid.exe不会让您的扩展被加载。
    verclsid.exe首先加载外壳扩展,并对外壳扩展进行快速检查,然后再向外壳发送" ok"指示加载扩展是安全的。

    有关verclsid.exe的一些详细信息,请参见此处。