Проблемы с перечислением значений реестра C # - PullRequest
2 голосов
/ 14 июля 2011

, когда я пытаюсь перечислить значения реестра, он не перечисляет все значения. Например, когда я делаю:

RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");

foreach (string vName in regKey.GetValueNames())
{
     Console.WriteLine("Reg values: " + vName);
}

ответ, который я получаю, это:

Reg values: CurrentVersion
Reg values: CurrentBuild
Reg values: SoftwareType
Reg values: CurrentType
Reg values: InstallDate
Reg values: RegisteredOrganization
Reg values: RegisteredOwner
Reg values: SystemRoot
Reg values: InstallationType
Reg values: EditionID
Reg values: ProductName
Reg values: CurrentBuildNumber
Reg values: BuildLab
Reg values: BuildLabEx
Reg values: BuildGUID
Reg values: CSDBuildNumber
Reg values: PathName

Я получаю только 17 строк, когда (если посмотреть в реестре) 21 строка.

Что я делаю не так? Отлично за каждый ответ.

1 Ответ

1 голос
/ 14 июля 2011

Это потому, что вы запускаете ваше приложение как 32-битное, и оно перенаправляется на узел Wow64 в реестре. Вам нужно либо изменить приложение на x64 / Anycpu, либо PInvoke API-интерфейсы реестра Windows вручную и передать параметр KEY_WOW64_64KEY для samDesired в RegOpenKeyEx.

Редактировать: Если комментатор опубликовал сообщение, если вы не хотите менять его на AnyCPU / x64, вы можете передать параметр KEY_WOW64_64KEY в функции .NET, не прибегая также к API Windows. См. C # Чтение реестра: ProductID возвращает нулевое значение в целевом приложении x86. «Любой процессор» работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...