0

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

  1. IShellFolder/IShellView -> 用于 Windows 资源管理器中的虚拟驱动器
  2. IContextMenu/IShellExtInit -> 用于弹出菜单文件和文件夹
  3. IShellIconOverlayIdentifier - 在文件和文件夹上显示覆盖图标
  4. IShellPropSheetExt/IShellExtInit -> 用于文件和文件夹属性中的自定义属性页

以上在 WinXP 中工作正常,我能够在 WinXP 中调试这个 shell 扩展。但是当我切换到 Vista 时,我只会得到 (2) 和 (4) 的方法调用。该驱动器是在 Windows 资源管理器中创建的,但是当我单击它时不会调用底层方法。虽然当我右键单击时,我被调用(2),当我为文件或文件夹选择“属性”时,我进入了(4)的代码。

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

4

2 回答 2

1

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

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

于 2009-03-19T05:36:58.280 回答
0

确保您的扩展程序正确处理初始化,否则 verclsid.exe 不会让您的扩展程序被加载。verclsid.exe 首先加载 shell 扩展并对它们进行快速检查,然后向 shell 发送“ok”,表明可以安全加载扩展。

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

于 2009-03-08T17:02:44.927 回答