5

次を呼び出すC#アプリケーションがあります。

Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Software\MyApp")                

これはターゲットx86に設定されており、実行すると、タスクマネージャーから32ビットプロセスであることがわかります。ただし、そのコード行は、奇妙なことに、HKCU \ Software \ Wow6432Node \ MyAppにある32ビットハイブではなく、HKCU \ Software\MyAppにある64ビットハイブに送られます。何か案は?

また、Powershellの2つのインスタンス(1つは32ビットと1つは64ビット)を開始し、以下を実行しましたが、どちらも64ビットハイブで値を返します。

get-itemproperty -Path Registry::HKEY_CURRENT_USER\Software\MyApp 

ここで何がうまくいかなかったのか、何か考えはありますか?32ビットと64ビットのハイブのレジストリ設定もregeditとは異なることをトリプルチェックしました。

4

1 に答える 1

4

リダイレクトではなく共有されているキー(HKCU \ Software)にアクセスしているためです。http://msdn.microsoft.com/en-us/library/windows/desktop/ms724072(v=vs.85).aspxおよび(より具体的には)http://msdn.microsoft.com/en-us/を参照してください。 library / windows / desktop / aa384253(v = vs.85).aspx

最初のリンクから(私の強調):

64ビットWindowsでは、レジストリエントリの一部が32ビットアプリケーションと64ビットアプリケーション用に別々に保存され、レジストリリダイレクタとレジストリリフレクションを使用して別々の論理レジストリビューにマップされます。これは、64ビットバージョンのアプリケーションが使用する場合があるためです。 32ビットバージョンとは異なるレジストリキーと値。リダイレクトまたは反映されない共有レジストリキーもあります。

于 2012-11-09T02:21:01.537 に答える