C# 从x64程序中搜索x32注册表项

C# 从x64程序中搜索x32注册表项,c#,.net,windows,registry,64-bit,C#,.net,Windows,Registry,64 Bit,我正在为x64编写一个C#应用程序,我的问题是我正在注册表中搜索包含某些关键字的一些键,由于注册表重定向,我只能搜索x64应用程序的注册表。 我设法在网上找到了一些代码,但我真的不知道该怎么处理它,因为据我所知,只有在我搜索模式或关键字时知道确切的键名,它才起作用。 [DllImport(“advapi32.dll”,EntryPoint=“RegOpenKeyEx”)] 公共静态外部注册表OpenKeyEx\u DllImport( UIntPtr hKey, 字符串子键, uint选项,

我正在为x64编写一个C#应用程序,我的问题是我正在注册表中搜索包含某些关键字的一些键,由于注册表重定向,我只能搜索x64应用程序的注册表。
我设法在网上找到了一些代码,但我真的不知道该怎么处理它,因为据我所知,只有在我搜索模式或关键字时知道确切的键名,它才起作用。 [DllImport(“advapi32.dll”,EntryPoint=“RegOpenKeyEx”)] 公共静态外部注册表OpenKeyEx\u DllImport( UIntPtr hKey, 字符串子键, uint选项, 内特萨姆, out IntPtr phkResult)


你试过使用LogParser吗?下面是一个如何使用它查询注册表的示例


如果您的目标是.net 4,则有一个新添加项允许您在托管代码中指定32位注册表。您可以使用指定适当的RegistryView

如果您的目标是.net 4,则有一个新添加项允许您在托管代码中指定32位注册表。您可以使用OpenBaseKey()指定适当的RegistryView。太好了,谢谢!成功了,现在我如何将您的评论标记为正确答案?诀窍是使用
KEY\u WOW64\u 32KEY
常量。在未来,考虑发布你正在使用的实际代码,而不是一些与你的问题无关的互联网上的随机代码。我不知道如何设置RealyVIEW视图,所以那是我当时使用的实际代码,使用KyyWoWoWo.64 32 KEY的问题是我不知道如何获取子密钥。(找到一个链接)所以任何方法都适用于我。不,谢谢,但显然它仍然被重定向。我正在搜索\HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,但我得到\HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
    [DllImport("advapi32.dll", EntryPoint = "RegQueryValueEx")]
    static extern int RegQueryValueEx_DllImport(
        IntPtr hKey,
        string lpValueName,
        int lpReserved,
        out uint lpType,
        System.Text.StringBuilder lpData,
        ref uint lpcbData);

public string GetKeyValue(string strSubKey, string strKey)
    {

        UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
        const int KEY_WOW64_32KEY = 0x0200;
        const int KEY_QUERY_VALUE = 0x1;

        IntPtr hKeyVal;
        uint lpType;
        uint lpcbData = 0;
        System.Text.StringBuilder pvData = new System.Text.StringBuilder(1024);
        int valueRet;



        string returnPath = String.Empty;
        unchecked
        {
            try
            {   //Open the required key path
                valueRet = RegOpenKeyEx_DllImport(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, out hKeyVal);

                //Retreive the key value
                valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);

                valueRet = RegQueryValueEx_DllImport(hKeyVal, strKey, 0, out lpType, pvData, ref lpcbData);

                returnPath = pvData.ToString();
            }
            catch (Exception e)
            {
                throw (e);
            }
        }
        return returnPath;
    }