Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列出注册表值C时出现问题#_C#_Registry - Fatal编程技术网

C# 列出注册表值C时出现问题#

C# 列出注册表值C时出现问题#,c#,registry,C#,Registry,当我尝试列出注册表值时,它不会列出所有的值。就像我在做: RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); foreach (string vName in regKey.GetValueNames()) { Console.WriteLine("Reg values: " + vName); } 我得到的答案是: Reg

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

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
当(如果我在注册表中查看)21行时,我只得到17行


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

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


编辑:如评论员所述,如果您不想更改为AnyCPU/x64,则可以将KEY\u WOW64\u 64KEY参数传递给.NET函数,而无需求助于Windows API。请参见

检查,如果您在Windows XP上读取有效的x64或x86注册表项,则其中只有19 17个注册表项是REG_SZ 2 REG_二进制,1个注册表项是REG_DWORD。其中3个不是字符串值。换句话说,你的方法是有缺陷的。谢谢你。在Visual C#express中修复它有点棘手。但是这里有一个答案,当您以.NET4.0为目标时,您只能传递
Registry64
值。对于.Net framework的早期版本,仍然需要P/Invoke。