C# 以regedit和编程方式读取HKEY#U LOCAL#U机器不会';不显示相同的键

C# 以regedit和编程方式读取HKEY#U LOCAL#U机器不会';不显示相同的键,c#,registry,regedit,C#,Registry,Regedit,作为参考,它是HKEY\U LOCAL\U MACHINE\SOFTWARE\ORACLE键。当我查看它时,我只看到1(inst_loc)子键,以及为我的应用程序添加的两个子键 但是,当应用程序(在同一用户帐户下运行)读取它时,它看不到我添加的两个键,而是看到大量其他键,如ORACLE_HOME等 这会找到很多钥匙,但不是我添加的两个: RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\ORACLE", false)

作为参考,它是
HKEY\U LOCAL\U MACHINE\SOFTWARE\ORACLE
键。当我查看它时,我只看到1(inst_loc)子键,以及为我的应用程序添加的两个子键

但是,当应用程序(在同一用户帐户下运行)读取它时,它看不到我添加的两个键,而是看到大量其他键,如ORACLE_HOME等

这会找到很多钥匙,但不是我添加的两个:

RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\ORACLE", false);
foreach (string name in regkey.GetValueNames()) { }
有人知道这种差异的原因吗


编辑:我做了一些挖掘。似乎当我加载LocalMachine.OpenSubKey(“SOFTWARE\ORACLE”)时,我实际上得到了HKEY\U LOCAL\u MACHINE\SOFTWARE\WOW6432NODE\ORACLE。但是如果客户端计算机上的值在HKEY\U LOCAL\u MACHINE\SOFTWARE\ORACLE中,该怎么办?我必须能够以某种方式访问它,最好检查这两个位置的值…

您的操作系统是什么(x32或x64)?应用程序是x32还是x64?查看HKLM\Software\Wow6432Node\Oracle。项目+属性,编译选项卡,平台目标事项。操作系统是x64,应用程序是x32。我想我可以将应用程序编译为其中一个,但问题是,我需要能够从一个应用程序访问两个位置。我不能依赖编写密钥的应用程序与我的申请相同的类型(32或64)。这已经在这里得到了回答:我在另一个stackoverflow问题的答案中发现了一个非常好的答案(它有代码和相关文章的链接)