2011-12-22 11 views
0

レジストリを読み込もうとしたが、Windows 2008 SBS x64オペレーティングシステムにのみ影響する奇妙な矛盾が発生しています。 Windows 7のx64のはさておきコメントを取るWindows 2008 SBS x64レジストリアクセス奇妙な動作

を動作しますが、Althought私は(私は今、それに応じて私の生産コードを変更した)すべての私のコードで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マシンでは起こりませんか? –

+0

実際には、Registry64ビューで開いてWow6432Nodeを指定しないと、それでもキーを見つけることができないため、** SBSマシンで**リダイレクトされていないように見えます。 –

+0

Wow6432Nodeをあなたのコンピュータに書き込まないでください。コード –