【问题标题】:How to update HKEY_CLASSES_ROOT after a new subky is added to HKEY_LOCAL_MACHINE\Software\Classes将新 subky 添加到 HKEY_LOCAL_MACHINE\Software\Classes 后如何更新 HKEY_CLASSES_ROOT
【发布时间】:2018-05-03 03:07:05
【问题描述】:

MSDN 说:

类注册和文件扩展名信息存储在 HKEY_LOCAL_MACHINEHKEY_CURRENT_USER 键下。 HKEY_LOCAL_MACHINE\Software\Classes 键包含可应用于本地计算机上所有用户的默认设置。 HKEY_CURRENT_USER\Software\Classes 键包含仅适用于交互式用户的设置。 HKEY_CLASSES_ROOT 键提供了一个注册表视图,它合并了来自这两个来源的信息。 HKEY_CLASSES_ROOT 还为为以前版本的 Windows 设计的应用程序提供了这种合并视图。

这是否意味着如果我向HKEY_LOCAL_MACHINE\Software\Classes 添加一个子键(比如一个新的文件扩展名),HKEY_CLASSES_ROOT 的容器将自动相应地更新?

如果没有,我该怎么办?

【问题讨论】:

  • 一句话,是的。它是自动处理的
  • 会的。 HKEY_CLASSES_ROOT 是一种别名(与 HKEY_CURRENT_USER 一样)。
  • @Remy Lebeau,Paul Sanders,谢谢,我明白了。
  • HKCR 是杂乱无章的,旨在成为在 16 位版本的 Windows 中启动的程序的兼容性视图。如果可以帮助,请始终避免。
  • HKCR 在 NT 5 中已更改为合并视图。这是在运行时由 Windows 注册表 API 实现的。此外,当前用户软件类是一个单独的配置单元(“%LocalAppData%\Microsoft\Windows\UsrClass.dat”),它故意不与用户配置文件一起漫游。用户的“Software\Classes”键是指向此配置单元的符号链接,在 HKU 下加载为“_Classes”。此外,对于句柄别名(不是符号链接),HKLM 用于“\Registry\Machine”,HKU 用于“\Registy\User”,HKCU 用于“\Registry\User\”。在内部,这些句柄别名在第一次使用时被映射到真正的 Key 句柄。

标签: c++ windows winapi


【解决方案1】:

HKEY_CLASSES_ROOT 不是真正的物理hive(它不存储数据),它只是HKEY_CURRENT_USER\Software\ClassesHKEY_LOCAL_MACHINE\Software\Classes 的合并视图。在HKEY_CLASSES_ROOT 中可以立即看到对底层密钥的更新。

HKEY_CURRENT_USER 中的值会覆盖 HKEY_LOCAL_MACHINE 中的值,因为在访问 HKEY_CLASSES_ROOT 时,注册表内部会首先尝试从 HKEY_CURRENT_USER 读取。

另外,HKEY_CURRENT_USER 实际上是HKEY_USERS 下的密钥的别名/符号链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多