我的 Windows 10 PC 上有两个用户配置文件,一个开发人员配置文件和一个常规配置文件。在开发人员配置文件中,我运行了一个.reg
文件以添加一个上下文菜单项,该菜单项打开一个带有活动 Git Bash 提示符的 Windows 终端实例。
令我惊讶的是,另一个 Windows 配置文件中的上下文菜单也显示了新的菜单选项,但是当单击它时,它显示一个错误,指出它无法访问指定的路径或文件。这是因为我没有在常规配置文件中安装 Windows 终端。在常规配置文件中删除相关注册表项也会从开发人员配置文件的上下文菜单中删除菜单项。
两个配置文件之间是否共享相同的 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 ."
是和不是。
HKEY_LOCAL_MACHINE
是共享的;HKEY_CURRENT_USER
是每个用户私有的。同时 HKEY_CLASSES_ROOT 是一个虚拟树,它实际上是每个用户和树的合并视图。(这是 Windows 9x 的遗留物,没有分离。)
HKCU\Software\Classes
HKLM\Software\Classes
对 HKCR 的写入将进入个人或系统注册表,具体取决于您的权限,并取决于要更新的密钥最初是从 HKCU 还是从 HKLM 加载的。
要拥有每个用户的文件关联,请将它们放入
HKEY_CURRENT_USER\Software\Classes
而不是使用 HKEY_CLASSES_ROOT。同样,要创建系统范围的,请将它们放在 HKLM 中。是的,只有一个注册表 注册表有许多真实的配置单元和一些“虚拟”配置单元。两个最重要的真正荨麻疹是
HKEY_LOCAL_MACHINE
和HKEY_USERS
。正如后者所暗示的,它拥有多个用户的值。现在
HKEY_CURRENT_USER
是一个HKEY_USERS
子键的虚拟映射,粗略地说是启动该过程的用户的键。因此,不同的进程可能有不同的HKEY_CURRENT_USER
映射。同理,HKEY_CLASSES_ROOT
也是一个虚视图,HKEY_LOCAL_MACHINE
与那个HKEY_USERS
子键合并而成。注册表支持访问控制列表 (ACL),因此您可能无法看到其他用户的密钥。