注册表项的值即使有值也返回为null

时间:2019-01-31 10:42:00

标签: c# registry return-value key-value

我正在尝试获取注册表项的值,然后将其与特定值进行比较(如果它与该值匹配)。不幸的是,我的方法返回一个“空”值,我不知道为什么。

if (HelperRegistry.RegistryKeyValueExists("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Office\\Outlook\\Addins\\Connect to Outlook.AddinModule", "FriendlyName", "Connect to Outlook"))
{
   OutputHandler.ColorCMDOutput("Do this", ConsoleColor.Green);
}
else
{
    OutputHandler.ColorCMDOutput("Do that", ConsoleColor.Red);
}


static public bool RegistryKeyValueExists(string keyName, string valueName, string valueToBeTested)
{
    try
    {
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName + "\\" + valueName))
            if (key != null)
            {
                Object o = key.GetValue("FriendlyName");
                if (o != null)
                {
                    string test = Convert.ToString(o);
                    if (test == valueToBeTested)
                    {
                        return true;
                    }
                }
            }
        return false;
    }
    catch
    {
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

我采用了不同的方法。我正在使用另一种方法(我已经知道)来检查valueName(valueData)是否存在,然后将其与我要测试的valueData进行比较。

static public bool RegistryKeyValueDataIdentical(string keyName, string valueName, string valueData)
{
    bool returnvalue = false;
    try
    {
        if (RegistryPathExists(keyName,valueName))
        {
            if (valueData == Microsoft.Win32.Registry.GetValue(keyName, valueName, null).ToString())
            returnvalue = true;
            else returnvalue = false;
        }
        else returnvalue = false;
    }
    catch
    {
        returnvalue = false;
    }
    return returnvalue;
}

static public bool RegistryPathExists(string keyName, string valueName)
{
    try
    {
        return (Microsoft.Win32.Registry.GetValue(keyName, valueName, null) != null);
    }
    catch
    {
        return false;
    }
}