首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows 7中加载Shell命名空间扩展失败

问在Windows 7中加载Shell命名空间扩展失败
EN

Stack Overflow用户
提问于 2011-07-12 23:45:18
回答 3查看 1K关注 0票数 5

我目前正在尝试创建一个自定义的Shell Namespace扩展(用于呈现一个包含“子文件夹”和“文件”的虚拟文件夹,它们实际上是来自远程服务的分层树结构中的数据的表示形式)。

这个扩展是用C#编写的,我知道这曾经是一个坏主意,但是自从.NET 4引入了不同版本的.NET运行时在同一进程中共存的可能性以来,我认为这个限制已经不再是问题了。

到目前为止,通过遵循网络上提供的大量示例和参考资料,我已经让它在Windows XP中运行得很好,但当我在Windows 7中尝试它时(我还没有在Vista中尝试它,所以我不知道它在Vista中是否有效),这个扩展没有加载。根据我的调试日志输出,它注册正常,但是当我打开Windows资源管理器窗口时,似乎没有发生对COM接口的常见调用(通常以IPersistFolder::Initialize开始)。实际上,甚至连类构造函数都没有被调用。我不知道是否正在查询接口(是否成功),因为我不确定如何在.NET中检测到这一点,以便记录它。所以,基本上,我没有任何线索可供参考,因为它甚至在我有机会记录任何可能出错的有用信息之前就失败了。

有没有人知道问题出在哪里?与Windows XP相比,Windows 7在处理shell命名空间扩展时有没有什么我应该注意的特性?如果需要更多细节,请随时询问(我尽量保持简短,因为我确信没有人会喜欢我在这里复制和粘贴我的整个代码,并且我不能将其缩减到仅相关的部分,因为我根本不知道哪些是……)

EN

回答 3

Stack Overflow用户

发布于 2012-12-20 04:20:20

我刚才遇到了一个非常类似的情况:

  • 我看到我的IPersistFolder::Initialize.

扩展位于正确的位置(在我的例子中是“我的电脑”)、图标和所有东西。尽管如此,我的COM类(我检查了进程监视器)没有执行任何实例化,也没有调用

我使用的是ATL和64位,所以我知道.NET不是我的问题。

原来问题是注册表中没有以下值:HKEY_CLASSES_ROOT\CLSID{您的CLSID}\ShellFolder "Attributes"=dword:20000000

(仅有键或值是不够的-您需要(至少)有这个特定的属性值才能启动某些东西)。

添加之后,你需要杀死所有的explorer.exe进程并再次启动一个(例如使用任务管理器)。我希望这也能解决你的问题。

票数 4
EN

Stack Overflow用户

发布于 2011-07-14 17:47:55

这可能是由于以下原因:

  1. 您的命名空间是否有任何可能无法加载的依赖项?
  2. 注册是否成功?如果创建了正确的条目,您是否真的检查了注册表?请记住,如果打开了UAC,您可能需要提升权限。

作为自己开发这种复杂野兽的另一种选择,可以考虑使用EZNamespaceExtensions -它使开发变得非常简单,您可以专注于提供特定于nse的功能。

免责声明:我们是EZNamespaceExtensions的开发者。

票数 0
EN

Stack Overflow用户

发布于 2018-08-15 00:09:44

谢谢@Oren,对我来说,问题是我需要删除以下regedit条目中的所有其他版本:HKEY_CLASSES_ROOT\CLSID{您的CLSID}\InprocServer32\

我只留下了当前的版本。我想问题是我的版本号比我当前的版本高。

补充一句,我不得不对另一台有类似问题的计算机执行同样的甚至更多的操作。我从HKEY_LOCAL_MACHINE\SOFTWARE\CLASSES\CLSID{your CLSID\InprocServer32\中删除了所有其他版本

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6667063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档