2016-10-21 10 views
0

のために発生しません。レジストリのリダイレクトは、私は次のコードを持っているHKEY_CURRENT_USER

私はローカルマシンの代わりに、現在のユーザーからの読み取りに上記のコードを変更します。

RegistryKey objRegKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\MySettings\\Dwm\\Preferences", true); 

と、以下のレジストリを作成して下: HKEY_LOCAL_MACHINE \ SOFTWARE \ MySettings \ DWM \環境は

コードnullを返します。その理由は、64ビットOS上の32ビットアプリケーションのレジストリリダイレクトにより、 HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432NODE \ MySettings \ Dwm \ Preferences からレジストリを読み込もうとしていることと、レジストリが存在しないためですnullを返します。 リダイレクトがHKEY_LOCAL_MACHINEに対してのみ発生し、HKEY_CURRENT_USERに対しては発生しないのはなぜですか?

+2

HKLMキーでのレジストリリダイレクトは、基本的な「常にリダイレクト」ではありません。それらがリダイレクト、反映、共有されるかどうかは、一連の[かなり複雑な規則](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384253(v = vs.85).aspx)に従います。 HKCUの規則は、Microsoft以外のアプリで使用するためのキーがあること、そしてそれらのアプリが既にどのような味であるかを知っていることが主な理由です。 CLSIDとAppIdの値だけが反映されます。あなたはWow6432Node btwを綴りません。文字はああ、数字はゼロではありません。 –

+0

が修正されました。それを指摘してくれてありがとう。 –

答えて

1

レジストリリダイレクトはバイナリオプションではありません - 存在するかどうか。時にはは、の32ビットと64ビットの両方のアプリケーションがレジストリの(一部の)「ビュー」を持ち、そうでない場合があります。

そのため、特定のkeys affected by redirectionが文書化されています。 HKEY_CURRENT_USER自体が共有されています(HKEY_CURRENT_USER\Software)。しかし、HKEY_CURRENT_USER\Software\Classes\CLSIDは、COMコンポーネント登録データ(必然的に32/64ビット分割)を含み、リダイレクトを実行します。

別の言い方をすれば、レジストリのリダイレクトが普遍的であれば、Wow6432Nodeなどを含むこの畳み込みのすべてを必要としません。32ビットのレジストリと64ビットのレジストリを持つだけです。

関連する問題