0

アプリケーションからレジストリ キーを読み取ろうとしています。これは 32 ビット プロセスであり、64 ビット システム (Win7 64 ビット) で実行されています。これは私のコードです:

string value64 = string.Empty;
RegistryKey localKeyRegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);    
localKey = localKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion");
if (localKey != null)
{
    value64 = localKey.GetValue("RegisteredOrganization").ToString();
    MessageBox.Show(value64, "value64");
}

私のシステムでは、このキー (SOFTWARE\Microsoft\Windows NT\CurrentVersion) の下の値は空で、この (SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion) の下の値は "Microsoft" です。しかし、メッセージ ボックスの value64 は空です! 「マイクロソフト」じゃないの?

4

1 に答える 1

0

RegistryView.Registry64から値を取得するように指定していますSOFTWARE\Microsoft\Windows NT\CurrentVersion

指定すると、代わりRegistryView.Registry32にそれを取得しますSOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion(つまり、64 ビット システムでは、32 ビット システムでは WOW6432Node が存在しないため、代わりに通常のハイブを使用します)。

RegistryView.Default指定すると呼び出しプロセスのビット数に合わせてハイブを選択してくれると思います。

于 2013-07-22T12:52:47.617 に答える