2011-07-12 61 views
5

我目前正在尝试创建一个自定义Shell命名空间扩展(用于呈现包含“子文件夹”和“文件”的虚拟文件夹,它实际上是分层树中数据的表示形式来自远程服务的结构)。这个扩展名是C#编写的,我知道这个扩展名是个不错的主意,但是自从.NET 4引入了不同版本的.NET运行时在同一个进程中共存的可能性以来,我想到了这一点限制不再是一个问题。Shell命名空间扩展无法在Windows 7中加载

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

有没有人碰巧有什么想法可能是什么问题?在处理我应该注意的shell命名空间扩展时,Windows 7中是否有任何与Windows XP相反的特性?如果需要更多的细节,请随时询问(我试图保持简短,因为我确信没有人会喜欢我复制&粘贴我的整个代码在这里,我不能削减到相关的部分,因为我根本就不知道这些是哪些......)

+2

这个......扩展名编译为32位,而Windows 7是64位?.. – GSerg

+0

不,这是一个32位的Win 7;我希望这个解决方案很简单... –

+0

这并不回答你的问题,但.NET命名空间扩展不支持.NET http://msdn.microsoft.com/en-us/library/windows/desktop/dd758089( v = vs.85)的.aspx。 –

回答

0

这可能是由于以下原因:

  1. 贵命名空间都依赖任何可能加载失败?

  2. 注册是否成功?如果创建了正确的条目,您是否真的检查过注册表?请记住,如果UAC处于启用状态,您可能需要提升权限。


作为替代自己开发这样复杂的野兽,可以考虑使用EZNamespaceExtensions - 这使得它非常容易,你可以专注于提供特定NSE-功能。

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

+0

注册表项全部看起来不错。就依赖关系而言,扩展只使用.NET 4运行时(当然这是安装的)。不幸的是,无论如何,我不知道如何确定是否需要加载或不加载。顺便说一句,系统事件日志中没有提供任何提示。我觉得我在雾中被蒙上眼睛... –

+0

EZNamespaceExtension.NET的大问题。它尚未更新很长时间。 LogicNP似乎已经失去了对EZNamespaceExtension.NET的兴趣,因为自2010年以来,还没有发布新的少数功能。没有.NET 4支持,也不支持Windows 8功能区工具栏。 – tronda

+0

尽管没有新的主要版本(没有必要),但我们不时进行小版本更新。 .Net 4.0:再次不真实 - 事实上,对于并行运行时.Net 4.0的支持,在.Net中开发nses变得更简单了! Win8功能区:MS尚未记录该API来执行功能区集成。如果您有相关文档的链接,请分享,以便我们添加此功能。 – logicnp

3

我刚才有一个非常类似的案例:

  • 我看到在正确的位置我的外壳扩展(在我的情况“我的电脑”),图标和一切。
  • 不过,没有实例化我的COM类(我检查过程监视器),并没有调用IPersistFolder :: Initialize。

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

原来,问题是我没有在注册表中的以下值: [HKEY_CLASSES_ROOT \ CLSID \ {您的CLSID} \ ShellFolder] “属性”= DWORD:20000000

(这是不够的有钥匙或价值存在 - 你需要(至少)这个特定的属性值来开始一些事情)。

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