Работа с реестром в 64-битной системе. Framework 2.0 - PullRequest
1 голос
/ 28 марта 2012

Как получить список подразделов в HKLM \ SOFTWARE в 64-битной системе?

P.S. Если я использую Registry.LocalMachine.OpenSubKey("SOFTWARE\\", false) тогда я получаю HKLM \ SOFTWARE \ Wow6432Node

Я могу использовать .NET Framework не выше, чем 2.0

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Ответ кажется довольно сложным, и, вероятно, слишком много кода, чтобы поместить его здесь в Stack Overflow.

В итоге вам нужно P / Invoke для доступа к собственным вызовам API Windows для RegOpenKeyEx , и обязательно передать флаг KEY_WOW64_64KEY, чтобы всегда получать доступ к 64-битному реестру. (KEY_WOW64_32KEY - флаг, обеспечивающий постоянный доступ к 32-битному)

Частичное решение было опубликовано на этой записи в блоге .

Для всех, кто может запустить .NET 4.0, вы можете использовать новую поддержку для этого: RegistryKey.OpenBaseKey (RegistryHive.LocalMachine, RegistryView.Registry64);

0 голосов
/ 28 марта 2012

Вы получите реестр для любой архитектуры, для которой ваше приложение запущено или скомпилировано. Если вы нацелены на x86, то вы всегда получите 32-битный реестр («Wow6432Node») на 64-битной машине. Если вы нацелены на AnyCPU, то вы получите реальный программный узел для архитектуры машины.

...