0

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で異なる理由を誰かが明らかにすることはできますか?

4

1 に答える 1

1

最も可能性の高い説明は、32ビットプロセスを使用しているため、レジストリリダイレクトが機能していることです。これにより、Wow6432Nodeセクションにリダイレクトされ、その後のリダイレクトの結果、キーが見つかりません。

Wow6432Nodeをアプリにハードコーディングしないでください。リダイレクタを使用してください、それはあなたの友達です。レジストリの特定のビューを指定する必要がある場合は、.net4RegistryView列挙を使用してください。RegistryView列挙を使用すると、プロセスが32ビットか64ビットかに関係なく、正しい場所が使用されるようになります。

于 2011-12-22T13:56:49.297 に答える