2

私の 32 ビット アプリケーションは 64 ビット Windows 7 で実行されています。レジストリにアクセスしようとしていますHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UninstallUninstallデフォルトの 64 ビット レジストリ ビューのキーの下にいくつかのサブキーがあることを regedit で確認できます (Dropbox はその場所と Google Chrome にキーを作成します)。Uninstallただし、実際には 32 ビット レジストリ ビューにはキーがありません。実際、regedit にはActive Setup以下の 1 つのキーしかありませんHKEY_CURRENT_USER\Software\Wow6432Node\MicrosoftWindows下にサブキーすらありませんMicrosoft

ただし、32 ビット アプリケーションが の 32 ビット レジストリ ビューにアクセスしようとするとHKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall、64 ビット ビューからキーを取得します。何故ですか?

フラグKEY_WOW64_32KEYでさえ、ここでは役に立ちません。コードは、結果が 32 ビット ビューからのものか、64 ビット ビューからのものかを知る必要があります。

私たちのコードは、キーの 32 ビット ビューと 64 ビット ビューの両方にもアクセスしますが、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstallこの問題は見当たりません。違いは、HKLM の 32 ビット ビューにはUninstallキーがあり、HKCU の 32 ビット ビューにはキーがないことです。

WoW64 のレジストリ リダイレクトは知っていますが、これは違うようです。MSDN で有用な情報を見つけることができませんでした。誰かがこれに光を当てることができますか?

4

2 に答える 2

4

これは文書化されていますが、間接的にのみです。このMSDN ページHKLM\Softwareは、リダイレクト済みおよびHKCU\Software共有済みとしてリストされています。

注:このコンテキストでのリダイレクトは、32 ビット用と 64 ビット用の 2 つのレジストリ ビューがあることを意味します (つまり、Wow6432Nodeサブキーが存在し、使用されます)。一方、共有とは、32 ビット用のビューが 1 つしかないことを意味します。ビットおよび 64 ビット プロセス。

そして、はい、存在することは興味深いですHKEY_CURRENT_USER\Software\Wow6432Node。OP が述べたように、その下にはサブキーしかありません。Microsoft\Active Setup\Installed Componentsこれは、Microsoft のアクティブ セットアップ コードの作成者がWow6432Node、レジストリ API 呼び出しで as サブキー パスをsamDesiredパラメーターを介して指定する代わりに誤って使用したためですRegOpenKeyEx

于 2014-06-25T14:40:31.950 に答える
0

これまでに受け取ったコメントに基づいてこの質問を閉じますが、これに関する公式の確認はありません。したがって、この時点では基本的に、64 ビット マシンには KKEY_CURRENT_USER の 32 ビット レジストリはありません。

于 2012-08-27T14:36:07.730 に答える