【问题标题】:Shell extension doesn't work in Windows-Explorer but works in other programs?Shell 扩展在 Windows-Explorer 中不起作用,但在其他程序中起作用?
【发布时间】:2011-12-01 20:52:43
【问题描述】:

我使用 ATL 进行了 shell 扩展(实现了 IContextMenuIShellExtInitIExtractIconIPersistFile),“按书本”。

有趣的是,在“Total Commander”和“Free Commander”等文件管理器中一切正常,但在 Windows 的资源管理器中完全失败:


当我在 TC(“Total Commander”)中右键单击我的注册文件(例如 *.000)时,扩展程序有效:我在我的日志和上下文菜单中看到它:出现带有图标的条目。

但是如果我使用 Win-Explorer,什么都不会发生! 没有出现日志条目,上下文菜单中没有任何证据 - 没有!即使完全重启 PC 也无济于事。

我当然注册了ShellEx\MyX\ContextMenuHandlersShellEx\IconHandlerkeys,还有Explorer的...\Shell Extensions\Approved\,都指向我的CLSID。 我使用的是 Windows 7。

我在这里想念什么?

【问题讨论】:

  • 64/32 位?如果您的操作系统是 64 位,则资源管理器也将是 64 位,并且您的所有 shell 扩展也必须是 64 位。看起来当前版本的 Total Commander 只有 32 位。
  • @SevaTitov:听起来不错。我使用 64 位操作系统,但编译和注册了 32 位应用程序。因此,我应该为 64 位 DLL 创建什么密钥而不是 InprocServer32?
  • 只编译 64 位和 regsvr32 这个二进制文件。注册表项仍称为 InprocServer32。
  • @SevaTitov:是的!它有效,你是对的!我完全不知道Registry Redirector,这就是陷阱。

标签: windows com atl shell-extensions


【解决方案1】:

@SevaTitov 回答了我的问题,但作为评论,因此对于偶然发现此问题的任何人的未来参考:

@SevaTitov:

如果您的操作系统是 64 位,则资源管理器也将是 64 位,并且您的所有 shell 扩展也必须是 64 位。看起来目前的 Total Commander 版本只有 32 位

Registry Redirector 就是这样,当您在 32 位程序中时,它会隐藏(“重定向”)64 位注册表项,反之亦然。

我很困惑,因为在我的 32 位注册表查看器应用程序中,我可以看到这些键,但不知道我只看到了注册表的一部分(64 位部分必须在 64 位查看器类似于 64 位 Windows 机器中的默认 regedit.exe)

【讨论】:

  • 这不仅仅是关于注册表的。 64 位资源管理器只能加载 64 位 DLL,因此它绝不可能使用您的 32 位 shell 扩展。您通常必须为 64 位操作系统提供两个版本的 shell 扩展,即 32 位和 64 位版本的 shell 扩展以匹配托管进程的位数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2021-04-06
相关资源
最近更新 更多