【C#】32bitアプリと64bitアプリのレジストリの扱い
移転しました。
約3秒後に自動的にリダイレクトします。
こんばんは。HIGHROです。
今回、レジストリを扱うプログラムをVisualStudio2012で作成していて、つまづいた内容をメモしておきたいと思います。
プラットフォームをx86で作成したアプリケーションとx64で作成したアプリケーションで、レジストリを参照する場所が違いました。
どうしても、x86でビルドしたアプリケーションでWow6432Nodeでない方を参照しようとしても、Wow6432Nodeの方に自動的にリダイレクトされてしまいます。
ここで、ちょっとプラットフォームにおけるレジストリの扱いをまとめてみました。
例:HKLM¥Software¥Microsoft¥Windows¥〜を参照する場合
x86(32bit)で作成したアプリケーション 実行環境「32bitOS」の場合:HKLM¥Software¥Microsoft¥Windows¥〜 実行環境「64bitOS」の場合:HKLM¥Software¥Wow6432Node¥Microsoft¥Windows¥〜 x64(64bit)で作成したアプリケーション 実行環境「32bitOS」の場合:参照不可(そもそも実行しない) 実行環境「64bitOS」の場合:HKLM¥Software¥Microsoft¥Windows¥〜 AnyCPUで作成したアプリケーション 実行環境「32bitOS」の場合:HKLM¥Software¥Microsoft¥Windows¥〜 実行環境「64bitOS」の場合:HKLM¥Software¥Microsoft¥Windows¥〜
となるみたいです。
AnyCPUで作成すれば、32bitOS環境では32bitのレジストリを参照し、64bitOS環境では64bitのレジストリを参照するので、両方のOSで対応するアプリケーションを作成する場合は、AnyCPUで作成する方がいいかもしれないです。
※AnyCPUで作成したアプリを64bitOSで実行すると、64bitOS用アプリケーションとして動作します。
64bit環境で実行しているアプリケーションでWow6432Nodeの情報を取得したい場合は、直接レジストリを指定する(例;HKLM¥Software¥Wow6432Node¥Microsoft¥Windows¥〜)ことで、参照することができます。