向HKEY_LOCAL_MACHINE\Software\Classes添加子项后,如何更新HKEY_CLASSES_ROOT?
如何在添加HKEY_LOCAL_MACHINE\Software\Classes子项后更新HKEY_CLASSES_ROOT?
最近折腾注册表时,刚给HKEY_LOCAL_MACHINE\Software\Classes加了个新子项,结果发现HKEY_CLASSES_ROOT(简称HKCR)没同步显示?别慌,咱们结合MSDN的官方说明来理清楚这事儿,顺便解决同步问题:
类注册与文件扩展名信息存储于HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER项中。HKEY_LOCAL_MACHINE\Software\Classes包含适用于本地计算机所有用户的默认设置;HKEY_CURRENT_USER\Software\Classes仅包含适用于交互用户的设置。HKEY_CLASSES_ROOT提供合并这两个来源信息的注册表视图,还提供对早期注册表版本的兼容性支持。
简单来说,HKCR不是真实存在的注册表项,它是系统实时合并HKLM\Software\Classes和HKCU\Software\Classes后的虚拟视图。那添加完子项后怎么让HKCR更新呢?给你几个实用方法:
- 刷新注册表编辑器(最常用):大部分情况下,打开注册表编辑器(
regedit.exe)后按下F5键刷新,就能看到HKCR里同步出你刚添加的子项了。 - 调用系统API强制刷新:如果自动刷新没生效(比如程序里修改注册表后需要立刻让系统感知),可以调用Windows的
SHChangeNotifyAPI,传入参数SHCNE_ASSOCCHANGED和SHCNF_IDLIST,这会通知系统文件关联和类注册发生变化,强制更新HKCR的视图。 - 重启相关进程:要是上面的方法都不行,试试重启资源管理器(explorer.exe),或者依赖该注册表项的应用程序,重启后新的注册信息就会在HKCR里正常显示了。
内容的提问来源于stack exchange,提问作者foo
相关产品推荐
相关产品推荐

