C# 将路径传递给RegistryKey,但返回不同的路径

C# 将路径传递给RegistryKey,但返回不同的路径,c#,registry,regedit,registrykey,C#,Registry,Regedit,Registrykey,在C#中使用RegistryKey,我试图在以下位置找到一个特定的软件: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 但是,即使我将此路径传递给子键,我也会返回此路径: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall 代码: public void getsubkey(Regis

在C#中使用RegistryKey,我试图在以下位置找到一个特定的软件:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
但是,即使我将此路径传递给子键,我也会返回此路径:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
代码:

public void getsubkey(RegistryKey SubKey)
{
List viList=新列表();
字符串[]val=SubKey.GetSubKeyNames();
foreach(val中的var变量)
{
RegistryKey SubKey1=SubKey.OpenSubKey(SubKey+@“\”+变量);
if(SubKey1.ToString()包含(“MySw”))
{
添加(变量);
}
}
}
我知道,因为我正在搜索一个特定的软件,它不在
WOW6432Node
注册表项中,而是在另一个注册表项中,并且有各种软件显示在
WOW6432Node
项中,而不是第一个注册表项中

为什么


有什么想法吗?

我猜您正在运行编译为
x86
的程序,而不是
任何CPU
?这是由于windows中32位进程与64位进程的注册表重定向。您需要使用指定32位或64位注册表“视图”的方法。这是一个全面的答案。如果你到处找的话,也有。好的,非常感谢。你所有的链接都帮了我很大的忙,解决了我的问题!
public void GetSubKeys(RegistryKey SubKey)
{
    List<string> viList = new List<string>();
    string[] val = SubKey.GetSubKeyNames();
    foreach (var VARIABLE in val)
    {
        RegistryKey SubKey1 = SubKey.OpenSubKey(SubKey + @"\" + VARIABLE);
        if (SubKey1.ToString().Contains("MySw"))
        {
            viList.Add(VARIABLE);
        }
     }
}