2011-12-22 56 views
0

嘗試讀取註冊表但僅影響Windows 2008 SBS x64操作系統時遇到奇怪的不一致。 Althought我還沒有嘗試過一切,但Windows 7的64位工作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) 

有人可以解釋爲什麼這種行爲在Windows7與SBS中有所不同嗎?

回答

1

最有可能的解釋是你有一個32位的進程,所以註冊表重定向正在發揮作用。這會將您重定向到Wow6432Node部分,然後您的後續重定向會導致找不到密鑰。

你不應該將Wow6432Node硬編碼到你的應用中。使用重定向器,它是你的朋友。如果您必須指定註冊表的特定視圖,請使用.net 4 RegistryView枚舉。使用RegistryView枚舉將確保無論您的進程是32位還是64位,都使用正確的位置。

+0

是的過程是32位。也許(很可能/很可能)重定向在玩,但爲什麼這不會發生在我的Windows 7 x64機器上? – 2011-12-22 14:39:24

+0

事實上,它似乎是**不是**在SBS機器上被重定向,因爲如果我在Registry64視圖中打開並且未指定Wow6432Node,那麼它仍然無法找到密鑰 – 2011-12-22 14:55:23

+0

您不應該在您的Wow6432Node中寫入代碼 – 2011-12-22 15:34:18