我有一个Copy Hook Handler shell扩展,我试图在Windows 7 64位上安装。
shell扩展DLL在32位和64位Windows的两个独立版本中编译。
DLL实现了DLLRegisterServer,它添加了必要的注册表项。
添加注册表项后,它会调用以下代码行来保存Windows shell:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
在Windows7 32位上,一切都很好用。 shell会立即识别扩展名。
在64位上,只有在重新启动shell后才能识别shell扩展。
有什么办法可以在不重新启动64位shell的情况下识别扩展名吗?
答案 0 :(得分:2)
事实证明,问题并非特定于64位Windows。
在咨询Microsoft之后,我了解到这种行为会影响32位和64位系统中的Copy Hook Handler。带有SHCNE_ASSOCCHANGED API的SHChangeNotify()显然不会导致shell重新加载复制钩子处理程序。
微软代表说:
shell在进程中第一次调用复制挂钩处理程序时构建并缓存已注册的复制挂钩处理程序的列表。创建列表后,除了终止进程之外,没有更新或刷新缓存的机制。这适用于Windows资源管理器和可能调用shell文件功能的任何其他进程,例如SHFileOperation。此时我们可以提供的最佳选择是在注册复制挂钩处理程序后重新启动系统。
希望这有助于某人!