2011-12-22 5 views
0

Я испытываю странную несогласованность при попытке прочитать реестр, но влияю только на операционные системы Windows 2008 SBS x64. Althought я не пробовал все, но для Windows 7 x64 работаетWindows 2008 SBS 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) 

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

ответ

1

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

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

+0

Да, процесс 32 бит. Может быть (вероятно/очень вероятно) перенаправление в игре, но почему это не происходит на моей машине Windows 7 x64? –

+0

На самом деле оказалось бы, что ** не ** перенаправляется на машину SBS, потому что если я откроюсь в представлении Registry64 и не укажу Wow6432Node, то он все равно не сможет найти ключ –

+0

Вы никогда не должны писать Wow6432Node в своем код –

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

  • Нет связанных вопросов^_^