所有用户配置文件之间是否共享相同的 Windows 注册表?

所有用户配置文件之间是否共享相同的 Windows 注册表?

我的 Windows 10 PC 上有两个用户配置文件,一个是开发人员配置文件,另一个是常规配置文件。在开发人员配置文件中,我运行了一个.reg文件来添加一个上下文菜单项,该菜单项会打开一个带有活动 Git Bash 提示符的 Windows 终端实例。

令我惊讶的是,另一个 Windows 配置文件中的上下文菜单也显示了新的菜单选项,但单击时却显示错误,提示无法访问指定的路径或文件。这是因为我没有在常规配置文件中安装 Windows Terminal。删除常规配置文件中相关的注册表项也会从开发人员配置文件中的上下文菜单中删除菜单项。

这两个配置文件之间是否共享相同的 Windows 注册表并导致这种情况发生?如果是这样,我如何为每个用户配置文件设置单独的注册表?

注册文件:

Windows Registry Editor Version 5.00
    
[HKEY_CLASSES_ROOT\Directory\Background\shell\windowsterminal]
@="Open Windows Terminal Here"
"Icon"="%USERPROFILE%\\AppData\\Local\\WTerminal\\terminal.ico"
        
[HKEY_CLASSES_ROOT\Directory\Background\shell\windowsterminal\command]
@="wt new-tab --profile \"Git Bash\" --startingDirectory ."

答案1

是也不是。HKEY_LOCAL_MACHINE是共享的;HKEY_CURRENT_USER是每个用户私有的。

同时 HKEY_CLASSES_ROOT 是一个虚拟的这棵树实际上是合并视图每个用户HKCU\Software\ClassesHKLM\Software\Classes树。(它是 Windows 9x 的遗留,没有这种分离。)

对 HKCR 的写入将转到个人或系统注册表,具体取决于您的权限,并且取决于正在更新的密钥最初是从 HKCU 还是 HKLM 加载的。

要建立每个用户的文件关联,请将它们放入其中,HKEY_CURRENT_USER\Software\Classes而不是使用 HKEY_CLASSES_ROOT。同样,要创建系统范围的文件关联,请将它们放入 HKLM。

答案2

是的,只有一个注册表。注册表有许多真实配置单元和许多“虚拟”配置单元。两个最重要的真实配置单元是HKEY_LOCAL_MACHINEHKEY_USERS。正如后者所暗示的,它保存了多个用户的值。

现在HKEY_CURRENT_USER是一个子键的虚拟映射HKEY_USERS,大致就是启动进程的用户的键。因此,不同的进程可能有不同的HKEY_CURRENT_USER映射。类似地,HKEY_CLASSES_ROOT也是一个虚拟视图,由合并HKEY_LOCAL_MACHINE和该HKEY_USERS子键形成。

注册表支持访问控制列表 (ACL),因此您可能无法看到其他用户的密钥。

相关内容