阅读注册表DWORD

时间:2015-07-25 20:11:42

标签: c# registry

下面的代码检查是否安装了MySQL。

    public bool MySql()
    {
        try
        {
            using (var key = Registry.CurrentUser.OpenSubKey("Software\\MySQL AB\\MySQL Server 5.6"))
            {
                var keyObject = key?.GetValue("installed");

                var keyToString = keyObject?.ToString();

                if (keyToString == "1")
                    return true;
            }
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }

然而,使用完全相同的代码,我试着看看是否安装了OpenSSL。

    public bool OpenSsl()
    {
        try
        {
            using (var key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1"))
            {
                var keyObject = key?.GetValue("NoModify");

                var keyToString = keyObject?.ToString();

                if (keyToString == "1")
                    return true;
            }
            return false;
        }
        catch (Exception)
        {
            return false;
        }
    }

在代码中设置断点显示该键返回null。我不确定为什么。是的,路径是正确的。

1 个答案:

答案 0 :(得分:0)

64位操作系统上的32位应用程序路由到HKLM \ Software \ Wow6432Node。要读取64位版本的密钥,我们需要使用RegistryView

C#4.0代码示例

public static RegistryKey GetRegistryKey(string keyPath)
    {
        RegistryKey localMachineRegistry
            = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
                                      Environment.Is64BitOperatingSystem
                                          ? RegistryView.Registry64
                                          : RegistryView.Registry32);

        return string.IsNullOrEmpty(keyPath)
            ? localMachineRegistry
            : localMachineRegistry.OpenSubKey(keyPath);
    }

如果您使用.NET 3.5或更低版本的p / invoke是唯一的解决方案。

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32-bit-application-or-vice-versa/