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

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

C# と VB.NET の入門サイト

x64からのHKEY_LMキー参照について

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90814 / inTopicNo.1)  x64からのHKEY_LMキー参照について
  
□投稿者/ カロリー0 (1回)-(2019/04/23(Tue) 20:47:09)

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

VB2017を使用

x86で動作しているアプリから
Registry.LocalMachine.OpenSubKey("SOFTWARE\(ソフト名)")とすれば、
実際のレジストリキーが

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\(ソフト名)

であっても上記キーを参照することができます。(64bitOSの場合)

これはそういう仕組みが予め用意されているのだと思います。
逆に、x64で動作するアプリから
Registry.LocalMachine.OpenSubKey("SOFTWARE\(ソフト名)")とすると、

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\(ソフト名)

は参照できない(WOW6432Nodeでないものを参照)という理解で
よろしいのでしょうか?

実は、Excelのアドイン(VSTO)を作成していて、
このアドインから別の32bitアプリのレジストリを参照したいと思ったのですが、
x64のExcelのアドインからだと、WOW6432Nodeのパスを指定しないと
対象レジストリキーにアクセスできなかったので、今回の質問をしました。

結局、x86, x64どちらでもWOW6432Node配下のレジストリキーを取得できるようにするには、
Registry.LocalMachine.OpenSubKey("SOFTWARE\(ソフト名)")でダメだったら
Registry.LocalMachine.OpenSubKey("SOFTWARE\WOW6432Node\(ソフト名)")を行う、
という方法しかないのでしょうか?
引用返信 編集キー/
■90815 / inTopicNo.2)  Re[1]: x64からのHKEY_LMキー参照について
□投稿者/ Azulean (1054回)-(2019/04/23(Tue) 21:46:05)
No90814 (カロリー0 さん) に返信
> 逆に、x64で動作するアプリから
> Registry.LocalMachine.OpenSubKey("SOFTWARE\(ソフト名)")とすると、
>
> HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\(ソフト名)
>
> は参照できない(WOW6432Nodeでないものを参照)という理解で
> よろしいのでしょうか?

そういうシナリオに備えて RegistryView という列挙値を引数に取るメソッドが用意されています。
https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.registrykey.openbasekey?view=netframework-4.8
https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.registryview?view=netframework-4.8

引用返信 編集キー/
■90816 / inTopicNo.3)  Re[2]: x64からのHKEY_LMキー参照について
□投稿者/ カロリー0 (2回)-(2019/04/24(Wed) 12:47:12)
Azulean さん、出来ました!

Dim basekey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
Dim subkey As RegistryKey = basekey.OpenSubKey("SOFTWARE\(ソフト名)")

で、64bit版から32bitアプリのレジストリを参照出来ました。
これを色々と応用しようと思います。

ありがとうございました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ