64bit環境で32bit版ソフトの情報がレジストリに書き込まれない!?

スポンサーリンク

パソコンの設定情報を書き込むのにレジストリというものを使います。

ソフトの開発をしていると、独自の情報などを書き込むのに使うのですが、64bitのWindows環境で使う場合の注意点を紹介します。

スポンサーリンク

レジストリの確認方法

前提としてレジストリの内容を確認する方法が必要です。

Windowsには「レジストリエディタ」というツールがあり、これを使うことでレジストリの確認や編集ができます。

なお、レジストリを編集した場合、最悪、Windowsが起動しなくなる可能性もありますので、もし、レジストリを編集する場合は自己責任で行ってください。

レジストリエディタを起動する方法は、Windows7の場合、スタートメニューの「プログラムとファイルの検索」欄に「regedit」と入力します。
Windows10の場合は、Cortanaに「regedit」と入力すれば regedit.exeが表示されるので、これを起動します。

一見すると複雑な構造になっていますが、自分で作ったソフトの情報を埋め込む先はほとんどが「HKEY_LOCAL_MACHINE\SOFTWARE」の下に構造を作っていきます。

例えば、○○会社で作ったHogeHogeというソフトの場合

「HKEY_LOCAL_MACHINE\SOFTWARE\○○\HogeHoge」という構造を作り、その中にパラメータを作成します。

今回はレジストリの内容を解説する記事ではないので、説明はこのあたりまでにしておきます。

スポンサーリンク

64bit環境にインストールした32bitソフトのレジストリ情報を確認する

本題ですが、32bitのソフトを64bit環境にインストールすると、32bit環境と少し違う構造となります。

分かりやすい例で行くと、インストール先の「Program Files」が64bit環境に32bitソフトをインストールすると「Program Files (x86)」というフォルダになります。

これは64bit環境で64bitのソフトと32bitのソフトが両方存在できる場合があるので、区別するための仕組みだと思います。(同じソフトでも、64bit版と32bit版が存在する場合があるため)

以前、システムファイルの構造について同様の記事を書いたことがあります。

systemフォルダのファイルの内容が違う
Windowsのsystem32フォルダに置いてあるファイルを参照したら、違う内容が表示されるという奇怪な現象を調査しました。

知人から質問がありました。

  • 32bit版のソフトを作成し、インストーラーも作成した
  • インストーラーでレジストリに情報を書き込むように設定した
  • 32bit環境にインストールするとレジストリに書き込まれた
  • 64bit環境にインストールするとレジストリに書き込まれていない

ということです。
問題は最後の「64bit環境でレジストリに値が書き込まれていない」という点です。

知人が書き込んだレジストリを「HKEY_LOCAL_MACHINE\SOFTWARE\○○\HogeHoge」とします。

32bit環境では、このレジストリキーが作成されますが、64bit環境では、このレジストリキーがないという状況です。

正解は「64bit環境に書き込まれる32bitソフトのレジストリは、自動的に違う構造になる」ということです。

具体的には「HKEY_LOCAL_MACHINE\SOFTWARE\」に書き込まれる情報が「HKEY_LOCAL_MACHINE\Software\WOW6432Node」の下に書き込まれるということです。

先ほどの例で行くと「HKEY_LOCAL_MACHINE\Software\WOW6432Node\○○\HogeHoge」という構造になります。
間に「WOW6432Node」というのが勝手に追加されるのです。

こちらを確認すると、知人の思っていた通りの内容でレジストリに書き込みされていました。

スポンサーリンク

まとめ

64bit環境に32bitのソフトを動かす場合は、想定外の出来事があるので、おかしいと思った場合はソフトの問題を疑うと同時に、Windows側の動きも確認する必要があります。

今回の場合、知人は「まさかレジストリの構造が違う」とは思いもしなかったようです。

世の中、64bit環境が当たり前になりつつありますが、昔作ったソフトはほとんどが32bit版だと思いますので、皆さんも気をつけてください。

PC関連IT助っ人
スポンサーリンク
スポンサーリンク
スポンサーリンク
カミヒロをフォローする

コメント

タイトルとURLをコピーしました