2010-01-22 60 views
2

我有一个复制挂钩处理程序外壳扩展,我试图安装在Windows 7 64位。外壳扩展安装无法识别的Windows 7 64位外壳

对于32位和64位Windows,shell扩展DLL被编译为两个单独的版本。

该DLL实现了DLLRegisterServer,它添加了必要的注册表项。

添加注册表项后,调用下面的代码行nofity Windows外壳程序:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); 

一切的伟大工程上的Windows7 32位。 shell立即识别扩展名。

在64位上,外壳扩展只在外壳重新启动后才被识别。

有什么我可以做的,导致扩展被识别而不重新启动64位外壳?

+0

此问题似乎也影响Vista 64位。 – Avalanchis 2010-01-22 20:19:43

回答

2

事实证明,该问题并非特定于64位Windows。

在咨询了Microsoft后,我了解到此行为会影响32位和64位系统中的复制挂钩处理程序。 SHChangeNotify()与SHCNE_ASSOCCHANGED API显然不会导致shell重新加载复制挂钩处理程序。

据微软的代表:

外壳建立并缓存在第一时间复制挂钩处理程序中调用的过程中注册的复印挂钩处理程序的列表。一旦创建了列表,除了终止进程之外,没有更新或刷新缓存的机制。这适用于Windows资源管理器和任何其他可能调用shell文件函数的进程,如SHFileOperation。我们现在可以提供的最佳选择是在复制挂钩处理程序注册后重新启动系统。

希望这可以帮助别人!