列出注册表值C#的问题

时间:2011-07-14 11:39:49

标签: c# registry

当我尝试列出注册表值时,它不会列出所有值。就像我在做的那样:

RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");

foreach (string vName in regKey.GetValueNames())
{
     Console.WriteLine("Reg values: " + vName);
}

我得到的答案就是这些:

Reg values: CurrentVersion
Reg values: CurrentBuild
Reg values: SoftwareType
Reg values: CurrentType
Reg values: InstallDate
Reg values: RegisteredOrganization
Reg values: RegisteredOwner
Reg values: SystemRoot
Reg values: InstallationType
Reg values: EditionID
Reg values: ProductName
Reg values: CurrentBuildNumber
Reg values: BuildLab
Reg values: BuildLabEx
Reg values: BuildGUID
Reg values: CSDBuildNumber
Reg values: PathName

我只有17行(如果我在注册表中查看)21行。

我做错了什么?每个答案都很棒。

1 个答案:

答案 0 :(得分:1)

这是因为您将应用程序作为32位运行,并且它被重定向到注册表中的Wow64节点。您需要手动将应用程序更改为x64 / Anycpu或 PInvoke Windows Registry APIs,并在RegOpenKeyEx中为samDesired传递KEY_WOW64_64KEY选项。

编辑如评论者发布的那样,如果您不想更改为AnyCPU / x64,则可以将KEY_WOW64_64KEY参数传递给.NET函数,而无需使用Windows API。见C# Reading the registry: ProductID returns null in x86 targeted app. “Any CPU” works fine