2012-01-24 3 views
0

Можно создать дубликат:
C# WOW6432 registry node messin things upWeird поведение при чтении реестра в C#

Это код:

var b1 = Registry.LocalMachine.OpenSubKey("software", true); 
var b2 = Registry.LocalMachine.OpenSubKey("software", true).OpenSubKey("company"); 
var r1 = Registry.LocalMachine.OpenSubKey("software").OpenSubKey("company").GetValueNames(); 
string resultString = Registry.LocalMachine.OpenSubKey("Software", true).CreateSubKey("company").GetValue(name).ToString(); 

Я призываю его name = "ApplicationDirectory". В последней строке первые две переменные указывают на правильные местоположения (в зависимости от их свойства Name). Проблема заключается в r1, который не перечисляет содержимое HKEY_LOCAL_MACHINE\SOFTWARE\company, а скорее HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\company. Почему это? Это некоторое перенаправление в 64-битных машинах?

+0

Краткий ответ: [Да] (http://msdn.microsoft.com/en-us/library/aa384232 (v = vs.85) .aspx). – Blorgbeard

+0

64-разрядные компьютеры имеют раздел реестра, отдельный для 32-битного. Я думаю, что это называется виртуализацией реестра. –

+0

http://stackoverflow.com/questions/8959983/c-sharp-wow6432-registry-node-messin-things-up/8960020#8960020 –

ответ

2

Да, существует перенаправление для 32-разрядных приложений на 64-битных машинах. См. Комментарии к вашему вопросу, а также this SO answer.

Если вы нацелились на .Net 4 или выше, вы сможете получить доступ к Wow6432Node (используется для 32-разрядных приложений) и «стандартного» узла (тот, который используется для 64-разрядных приложений), поскольку метод RegistryKey.OpenBaseKey обеспечивает параметр типа RegistryView, который позволяет выбрать правильный узел для использования.

Если вы используете .Net 3.5 или предыдущую версию, вам нужно будет использовать P/Invoke, если вы хотите читать оба ключа реестра 32/64 бит на 64-разрядной машине. Вам нужно будет использовать RegOpenKeyEx и указать KEY_WOW64_32KEY как флаг для желаемого доступа. Но это еще одна история и вне сферы вашего вопроса.

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