Как прочитать значение ключа реестра C#

При запуске приложения я пытаюсь определить, установлена ​​ли у пользователя определенная версия программного обеспечения, в частности, коннектор MySQL, использующий C#. В реестре MySQL содержится запись о версии. Так что я пытаюсь сделать это.

Мое приложение запускается. Где-то в стартовом коде мне нужно сделать следующие вещи по порядку. Проверьте, есть ли у пользователя установленный соединитель MySQL, который расположен в...

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net

Если у пользователя установлен соединитель, я хотел проверить, какая у него версия, которая хранится в виде Name = "Version" и Data = xxx (рисунок ниже).

Теперь, если у пользователя установлена ​​конкретная версия, я выполню другой код, который я могу взять.

Что было бы лучшим способом добиться этого?

введите описание изображения здесь

РЕДАКТИРОВАТЬ: Ниже приведен код, который у меня есть в настоящее время, и я получаю сообщение об ошибке в строке 19 (это комментируется). Моя ошибка говорит "error CS1001: Identifier Expected"Я не смог понять, что это значит. Любая помощь?

using System;
using Microsoft.Win32;
using System.Data;

public class regTest
{
    public static void Main()
    {
        try
        {
            RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net");
            if (key != null)
            {
                Object o = key.GetValue("Version");
                if (o != null)
                {
                    Version version = new Version(o as String);  //"as" because it's REG_SZ...otherwise ToString() might be safe(r)
                    Version broken = new Version("6.7.4");
                    if (version.Equals.(broken)) //This is where the error is occuring
                    {
                        DataSet dataSet = ConfigurationManager.GetSection("system.data") as ystem.Data.DataSet;

                        DataView vi = dataSet.Tables[0].DefaultView;
                        vi.Sort = "Name";
                        if (vi.Find("MySql") == -1)
                        {
                            dataSet.Tables[0].Rows.Add("MySql"
                                , "MySql.Data.MySqlClient"
                                , "MySql.Data.MySqlClient"
                                ,
                                typeof(MySql.Data.MySqlClient.MySqlClientFactory).AssemblyQualifiedName);
                        }

                    }

                }
            }
        }

        catch (Exception ex)  //just for demonstration...it's always best to handle specific exceptions
        {
             //react appropriately
        }
    }
}

4 ответа

Решение

Вы должны сначала добавить using Microsoft.Win32; на вашу кодовую страницу.

Тогда вы можете начать использовать Registry классы:

try
{
    using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"))
    {
        if (key != null)
        {
            Object o = key.GetValue("Version");
            if (o != null)
            {
                Version version = new Version(o as String);  //"as" because it's REG_SZ...otherwise ToString() might be safe(r)
                //do what you like with version
            }
        }
    }
}
catch (Exception ex)  //just for demonstration...it's always best to handle specific exceptions
{
    //react appropriately
}

ВНИМАНИЕ: если у вас нет прав администратора, вы вряд ли сможете многое сделать в LOCAL_MACHINE, Иногда даже чтение значений может быть подозрительной операцией без прав администратора.

@DonBoitnott имеет хороший код, но требует прав администратора. Я использую это (требуются только права на чтение)

       try
 {
      using (var key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net", false)) // False is important!
      {
           var s = key?.GetValue("Version") as string;
           if (!string.IsNullOrWhiteSpace(s))
           {
                var version = new Version(s);
           }
      }
 }
 catch (Exception ex)  //just for demonstration...it's always best to handle specific exceptions
 {
      //react appropriately
 }

Изменить:

using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"))

Для того, чтобы:

using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Wow6432Node\MySQL AB\MySQL Connector\Net"))

Изменить:

using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\MySQL AB\\MySQL Connector\\Net"))

Для того, чтобы:

 using (RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\Wow6432Node\MySQL AB\MySQL Connector\Net"))
Другие вопросы по тегам