C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.92591 の関連記事表示

<< 0 >>
■92591  レジストリ書込・参照時の「WOW6432Node」について
□投稿者/ 鯖江ミナ -(2019/10/09(Wed) 11:23:45)

    分類:[VB.NET/VB2005 以降] 

    VB(VB2013, 2017)でWindowsアプリを開発していますが、
    最近になって疑問に思ったことがあります。
    インストーラーを作成してアプリをインストールする際に
    インストーラー側でレジストリ書き込みする場合、
    例えば「HKEY_LOCAL_MACHINE\SOFTWARE\(ソフト名)」キーを作成して書き込みを行う場合、
    32ビットアプリ(x86でビルド)の場合だと
    「HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\(ソフト名)」のように、
    「WOW6432Node」キー配下にキーが作成されます。
    キー参照の場合も、「HKEY_LOCAL_MACHINE\SOFTWARE\(ソフト名)」キーを参照しようとすると、
    実際には「HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\(ソフト名)」キーが参照されます。

    一方、例えばソフト実行時に
    「HKEY_CURRENT_USER\Software\(ソフト名)」キーを作成して書き込みを行う場合、
    32ビットアプリ(x86でビルド)の場合でも、レジストリのパスはそのままに
    「HKEY_CURRENT_USER\Software\(ソフト名)」のキーが作成され、
    「WOW6432Node」配下にはキーが作成されません。

    これらは何らかのルールに則って処理がなされているのでしょうか?
    (インストールの場合は特別に「WOW6432Node」が考慮される、とか)

    また、例えば、ソフト(VB)側で、
    「HKEY_CURRENT_USER\Software\(ソフト名)」キーがなかったら
    「HKEY_CURRENT_USER\Software\WOW6432Node\(ソフト名)」キーを参照する
    (あるいは逆)ようなことは簡単にできるのでしょうか?
親記事 /過去ログ160より / 関連記事表示
削除チェック/

■92595  Re[1]: レジストリ書込・参照時の「WOW6432Node」について
□投稿者/ 魔界の仮面弁士 -(2019/10/09(Wed) 12:50:13)
    No92591 (鯖江ミナ さん) に返信
    > 32ビットアプリ(x86でビルド)の場合でも、レジストリのパスはそのままに
    > 「HKEY_CURRENT_USER\Software\(ソフト名)」のキーが作成され、
    > 「WOW6432Node」配下にはキーが作成されません。

    .NET Framework からアクセスする場合は、RegistryView パラメーターで
    明示的に切り替えることができます。

     RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
     RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)


    > これらは何らかのルールに則って処理がなされているのでしょうか?
    > (インストールの場合は特別に「WOW6432Node」が考慮される、とか)

    動作ターゲットが WOW64 かどうか、とか。

    同様のものとして、ファイル システム リダイレクタという機構がありますね。

    64bit 環境上の 32bit プロセスから "C:\Windows\System32\" ディレクトリにアクセスすると、
    実際には C:\Windows\SysWOW64\ ディレクトリへの参照となることがあります。
    この場合、本当に C:\Windows\System32\ ディレクトリを参照するために、
    "C:\Windows\SysNative\" という仮想ディレクトリパスを使う必要があります。

    一方、64bit プロセスからだと Sysnative 仮想ディレクトリは使えませんので、
    "C:\Windows\System32\" と "C:\Windows\SysWOW64\" をそのまま使います。
記事No.92591 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92597  Re[2]: レジストリ書込・参照時の「WOW6432Node」について
□投稿者/ 鯖江ミナ -(2019/10/09(Wed) 12:56:47)
    魔界の仮面弁士様、ありがとうございます。
    色々と勉強になります。
    ありがとうございました♪(^ε^)chu
記事No.92591 のレス / END /過去ログ160より / 関連記事表示
削除チェック/

■92594  Re[1]: レジストリ書込・参照時の「WOW6432Node」について
□投稿者/ とっちゃん -(2019/10/09(Wed) 12:07:57)
    No92591 (鯖江ミナ さん) に返信

    > これらは何らかのルールに則って処理がなされているのでしょうか?
    > (インストールの場合は特別に「WOW6432Node」が考慮される、とか)
    >
    HKEY_LOCAL_MACHINE\Software\ キーは、32bit/64bit で専用のキーを見るように
    OS側で自動的にリダイレクト(参照先の変更)が行われるようになっています。


    > また、例えば、ソフト(VB)側で、
    > 「HKEY_CURRENT_USER\Software\(ソフト名)」キーがなかったら
    > 「HKEY_CURRENT_USER\Software\WOW6432Node\(ソフト名)」キーを参照する
    > (あるいは逆)ようなことは簡単にできるのでしょうか?

    一方、HKEY_CURRENT_USER\Software\ キーはリダイレクトの対象にはなっていないため
    こちらは、32bitアプリでも 64bitアプリでも同じレジストリが参照されます。

    そのため、アプリが32bitであろうが、64bitであろうが、HKEY_CURRENT_USER\Software キーに関しては
    切り替えるような仕組みはありません。
    アプリ側で32/64で別々のキーとしたいのなら、別の方法を考える必要があります。

    例えば、
    HKEY_CURRENT_USER\Sowtware\(ソフト名)\x86\...
    HKEY_CURRENT_USER\Sowtware\(ソフト名)\x64\...
    と、キーアクセスのところに32/64の区別を行うようなキーを挟む。

    というように、独自に対応する必要があります。

    HKEY_CURRENT_USER\Software\WOW6432Node\(ソフト名)\ とする場合でも自分で環境を見て
    レジストリキー文字列を組み立てる必要があります。
記事No.92591 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92596  Re[2]: レジストリ書込・参照時の「WOW6432Node」について
□投稿者/ 鯖江ミナ -(2019/10/09(Wed) 12:54:45)
    とっちゃん様、ありがとうございます。
    HKEY_CURRENT_USER\Software\ キーに関しては、32bitでも64bitでも
    「HKEY_CURRENT_USER\Software\(ソフト名)」そのものが参照できればいいので、
    何も気にする必要はない、ということですね。
    スッキリしました。
    ありがとうございました♪(^ε^)
記事No.92591 のレス / END /過去ログ160より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -