gpt4 book ai didi

.net - Shell 命名空间扩展无法在 Windows 7 中加载

转载 作者:行者123 更新时间:2023-12-01 22:21:40 25 4
gpt4 key购买 nike

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

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

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

有谁知道问题可能出在哪里吗?在处理 shell 命名空间扩展时,与 Windows XP 相比,Windows 7 是否有任何我应该注意的特性需要考虑?如果需要更多详细信息,请随时询问(我试图保持简短,因为我确信没有人会欣赏我将整个代码复制并粘贴到此处,并且我无法将其缩减为仅相关部分,因为我根本不知道不知道这些是什么......)

最佳答案

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

  • 我在正确的位置(在我的例子中为“我的电脑”)、图标和所有内容中看到了我的 shell 扩展。
  • 仍然没有对我的 COM 类进行实例化(我检查了进程监视器),也没有调用 IPersistFolder::Initialize。

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

事实证明问题是我在注册表中没有以下值:[HKEY_CLASSES_ROOT\CLSID\{您的 CLSID}\ShellFolder]“属性”=dword:20000000

(仅存在键或值是不够的 - 您需要(至少)具有此特定属性值才能开始某些操作)。

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

关于.net - Shell 命名空间扩展无法在 Windows 7 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com