
У меня есть два профиля пользователя на моем ПК с Windows 10, профиль разработчика и обычный профиль. В профиле разработчика я запустил файл, .reg
чтобы добавить элемент контекстного меню, который открывает экземпляр Windows Terminal с активной подсказкой Git Bash.
К моему удивлению, контекстное меню в другом профиле 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\Classes
так и HKLM\Software\Classes
для деревьев. (Это пережиток Windows 9x, в которой не было разделения.)
Записи, выполненные в HKCR, будут отправлены либо в личный, либо в системный реестр в зависимости от ваших прав, а также в зависимости от того, был ли обновляемый ключ изначально загружен из HKCU или HKLM.
Чтобы иметь ассоциации файлов для каждого пользователя, поместите их HKEY_CURRENT_USER\Software\Classes
вместо использования HKEY_CLASSES_ROOT. Аналогично, чтобы создать общесистемные ассоциации, поместите их в HKLM.
решение2
Да, есть один реестр. Реестр имеет несколько реальных ульев и несколько «виртуальных» ульев. Два самых важных реальных улья — это HKEY_LOCAL_MACHINE
и HKEY_USERS
. Как подразумевает последний, он содержит значения для нескольких пользователей.
Now HKEY_CURRENT_USER
— это виртуальное отображение одного HKEY_USERS
подключа, грубо говоря, ключа пользователя, который запустил процесс. Следовательно, разные процессы могут иметь разные HKEY_CURRENT_USER
отображения. Аналогично, HKEY_CLASSES_ROOT
это также виртуальное представление, сформированное путем слияния HKEY_LOCAL_MACHINE
и этого HKEY_USERS
подключа.
Однако реестр поддерживает списки контроля доступа (ACL), поэтому вы, возможно, не сможете увидеть ключи других пользователей.