Значение ключа реестра возвращается как ноль, даже если оно имеет значение - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь получить значение ключа реестра и сравнить его впоследствии с конкретным значением, если оно соответствует этому значению.К сожалению, мой метод возвращает нулевое значение, и я не знаю, почему.

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 голосов
/ 04 февраля 2019

Я пошел с другим подходом.Я использую другой метод (я уже получил), чтобы проверить, существует ли вообще значение 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;
    }
}
...