所有用户配置文件之间共享同一个Windows注册表吗?

我在我的Windows 10电脑上有两个用户配置文件,一个是开发者配置文件,另一个是普通配置文件。在开发者配置文件中,我运行了一个.reg文件,以添加一个上下文菜单项,该菜单项打开一个带有活动Git Bash提示符的Windows终端实例。

令我惊讶的是,另一个Windows配置文件的上下文菜单也显示了新的菜单选项,但点击后显示了一个错误,表示无法访问指定的路径或文件。这是因为我在普通配置文件中没有安装Windows终端。而删除普通配置文件中相关的注册表键也会将开发者配置文件的上下文菜单项移除。

是同一个Windows注册表在两个配置文件之间共享导致了这个问题吗?如果是这样,我该如何为每个用户配置文件创建一个独立的注册表?

Reg文件:

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 ."

7只有一个注册表。如果您能包含.reg文件的内容,可能会有所帮助。 - mashuptwice
@mashuptwice,我编辑了问题以包括reg文件的内容。谢谢。 - Raj Narayanan
@mashuptwice 有没有办法为每个用户配置文件提供自己的注册表副本?我不希望开发者用户配置文件的注册表键影响普通配置文件。 - Raj Narayanan
4你需要按照这里提到的方式将值添加到HKEY_CURRENT_USER中:https://stackoverflow.com/questions/59917614/edit-the-windows-explorer-context-menu-for-only-a-single-user - mashuptwice
@mashuptwice 这就是我需要的。谢谢。 - Raj Narayanan
2个回答

是和不是。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请参阅https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/registry-hives。**HKEY_CURRENT_CONFIG** System, System.alt, System.log, System.sav HKEY_CURRENT_USER Ntuser.dat, Ntuser.dat.log HKEY_LOCAL_MACHINE\SAM [存储安全设置的位置] Sam, Sam.log, Sam.sav HKEY_LOCAL_MACHINE\Security Security, Security.log, Security.sav HKEY_LOCAL_MACHINE\Software Software, Software.log, Software.sav HKEY_LOCAL_MACHINE\System System, System.alt, System.log, System.sav HKEY_USERS.DEFAULT Default, Default.log, Default.sav - user1644677
3HKCR是来自Windows 3的,但并不是实际上的残留物,Windows确实会从中读取信息。 - Anders
2@Anders,“剩下的”意味着设计是从Windows 3中剩下来的(正如你正确指出的)- 实际上它仍然在使用中。 - Jonathan

是的,有一个单一的注册表。注册表中有许多真实的蜂房和许多“虚拟”蜂房。其中两个最重要的真实蜂房是HKEY_LOCAL_MACHINE和HKEY_USERS。正如后者所暗示的那样,它保存了多个用户的值。 现在,HKEY_CURRENT_USER是一个虚拟映射,大致上是指启动进程的用户的键。因此,不同的进程可能具有不同的HKEY_CURRENT_USER映射。类似地,HKEY_CLASSES_ROOT也是一个虚拟视图,由HKEY_LOCAL_MACHINE和那个HKEY_USERS子键合并而成。 注册表支持访问控制列表(ACL),因此您可能无法看到其他用户的键。

没有存储多个用户值的HKEY_USERS注册表。HKEY_USERS是一个容器,在其中每个用户的注册表成为挂载(仅在该用户配置文件加载时),属于该用户的所有值都与其他用户和公共注册表分开存储。 - Ben Voigt
@BenVoigt:而HKLM部分是它自己的文件。支持注册表的存储是一个相当无关紧要的细节。从概念上讲,它是一个整体。 - MSalters
HKEY_USERS的存储作为一组单独的每个用户蜂房并不是无关紧要的,事实上,这些注册表的部分随着LoadUserProfile()的出现和消失而非常明显。 - Ben Voigt
此外,"hive"(“hive”的含义)主要指的是分离的存储。将HKEY_USERS称为一个“hive”是完全错误的。 - Ben Voigt

  • 相关问题