2016-10-21 3 views
0

У меня есть следующий код:Перенаправление реестра не бывает для HKEY_CURRENT_USER

RegistryKey objRegKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true); 

У меня есть ключ, присутствующий в реестре в разделе: HKEY_CURRENT_USER \ SOFTWARE \ MySettings \ Dwm \ Preferences и так это прекрасно работает.

Когда я изменить приведенный выше код для чтения из локального компьютера, а не текущего пользователя:

RegistryKey objRegKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true); 

и создать следующий параметр реестра в разделе: HKEY_LOCAL_MACHINE \ SOFTWARE \ MySettings \ Dwm \ Preferences

Код возвращает null. Я понимаю, что из-за переустановки реестра для 32-разрядных приложений в 64-разрядной ОС он пытается прочитать реестр с: HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432NODE \ MySettings \ Dwm \ Preferences и поскольку реестра не существует, оно возвращает null. Вопрос в том, почему перенаправление происходит только для HKEY_LOCAL_MACHINE, а не для HKEY_CURRENT_USER?

+2

Переадресация реестра на ключи HKLM не является базовым «всегда перенаправляемым» делом. Независимо от того, перенаправлены ли они, отражены или разделены, следует набор [довольно запутанных правил] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253 (v = vs.85) .aspx). Для HKCU существует только несколько правил, в основном потому, что ключи, которые используются для приложений, отличных от Microsoft, и те приложения уже знают, какой вкус они представляют. Отражены только значения CLSID и AppId. Вы ошибочно написали Wow6432Node btw, буква oh, а не цифра нуль. –

+0

Исправлено. Спасибо, что указали это. –

ответ

1

Registry Redirection не является бинарным вариантом - либо присутствующим, либо нет. Иногда вам нужны и 32-разрядные, и 64-разрядные приложения имеют одинаковый «вид» (часть) реестра, а в других случаях вы этого не делаете.

Именно поэтому специфические keys affected by redirection документированы. HKEY_CURRENT_USER сам по себе, равно HKEY_CURRENT_USER\Software. Однако HKEY_CURRENT_USER\Software\Classes\CLSID, который включает в себя данные регистрации COM-компонента (который обязательно разделен на 32/64 бит), выполняет перенаправление.

Или, говоря иначе, если перенаправление реестра было универсальным, вам не понадобится вся эта свертка с участием Wow6432Node и т. Д. У вас будет только 32-разрядный реестр и 64-разрядный реестр.

Смежные вопросы