【问题标题】:HKEY_LOCAL_MACHINE\SOFTWARE\Classes vs HKEY_CLASSES_ROOTHKEY_LOCAL_MACHINE\SOFTWARE\Classes 与 HKEY_CLASSES_ROOT
【发布时间】:2018-12-31 06:44:43
【问题描述】:

在微软的documentation中,我找到了下面这段

HKEY_LOCAL_MACHINE\SOFTWARE\Classes 键对应于 HKEY_CLASSES_ROOT 键,保留该键是为了与早期版本的 COM 兼容。

现在,我不确定该段中的 which 指的是哪个键:HKLM\SOFTWARE\Classes 或 HKCU 键。

如果有人能澄清一下,我将不胜感激。

【问题讨论】:

  • HKEY_CLASSES_ROOT (HKCR) 是HKEY_LOCAL_MACHINE\SOFTWARE\Classes 的精确副本。另一个是HKEY_CURRENT_USER (HKCU) 虽然有(不同的)HKEY_CURRENT_USER\Software\Classes

标签: registry


【解决方案1】:

HKEY_CLASSES_ROOT(缩写。HKCR,不要与HKC混淆UHKEY_CURRENT_USER)是@的合并视图987654330@ HKLM HKCU中的子层次结构。

这实际上已记录在案,尽管它与您所指的COM docs 没有链接:

HKEY_CLASSES_ROOT Key:

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

他们甚至进入details of this merge mess,但如果您需要合并视图中的任何特定行为,建议您进行验证,因为我认为细节相当混乱:

  • 为了阅读,基本上大部分内容都被合并了,也就是说,您将看到两个键和来自重叠键的两个值。
  • 当您在两者中具有相同的 时,您很可能会看到来自 HKCU 的那个,而不是来自 HKLM 的那个。
  • 当您在两者中拥有相同/重叠的键时,您将看到其合并的值和子键。 (或者我认为。)(至少在 Win7 上。)
  • 当您通过 HKCR 写作时,这将取决于您是否是管理员。以及是否在 UAC 下运行。 尽量不要通过 HKCR 写代码,它会让你的生活更轻松。
    • 具体来说,我指的是this gem(这是您实际可以观察到的):

      如果您将密钥写入到 HKEY_CLASSES_ROOT 下的密钥,系统将存储 HKEY_LOCAL_MACHINE\Software\Classes 下的信息。

      如果您将值写入到 HKEY_CLASSES_ROOT 下的键中,并且键 HKEY_CURRENT_USER\Software\Classes 下已经存在,系统 将信息存储在那里而不是在 HKEY_LOCAL_MACHINE\Software\Classes。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多