Странное поведение доступа к реестру в Windows 2008 SBS x64 - PullRequest
0 голосов
/ 22 декабря 2011

При попытке чтения реестра наблюдается странное несоответствие, которое затрагивает только операционные системы Windows 2008 SBS x64.Хотя я не пробовал все, но Windows 7 x64 работает

Если оставить в стороне комментарии, что я вообще не должен использовать Wow6432Node в своем коде (теперь я изменил свой производственный код соответственно), кажется следующеестранно:

Dim baseKey As RegistryKey
Dim regKey As RegistryKey

baseKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64)
regKey = baseKey.OpenSubKey("SOFTWARE", False)
regKey = regKey.OpenSubKey("Wow6432Node", False)
regKey = regKey.OpenSubKey("Parker Technologies", False)
regKey = regKey.OpenSubKey("CaptureIT", False)
regKey = regKey.OpenSubKey("3.0", False)
'the above all opens ok on both windwows 7 x64 and 2008 SBS x64

regKey = baseKey.OpenSubKey("SOFTWARE\Wow6432Node\Parker Technologies", False)
'this opens ok on win 7 x64 but fails to open the key on 2008 SBS x64 
'(although it does exist as it has just been opened above)

Может кто-нибудь пролить свет на то, почему это поведение отличается в Windows7 от SBS?

1 Ответ

1 голос
/ 22 декабря 2011

Наиболее вероятным объяснением является то, что у вас 32-битный процесс, и перенаправление реестра находится в процессе игры. Это перенаправит вас в раздел Wow6432Node, а затем последующее перенаправление приведет к тому, что ключ не будет найден.

Вы никогда не должны жестко кодировать Wow6432Node в своем приложении. Используйте редиректор, это ваш друг. Если вам нужно указать конкретное представление реестра, используйте перечисление .net 4 RegistryView. Использование перечисления RegistryView гарантирует, что используется правильное расположение, независимо от того, является ли ваш процесс 32-битным или 64-битным.

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