web-dev-qa-db-fra.com

Comment lire la valeur d'une clé de registre c #

Au démarrage de mon application, j'essaie de voir si l'utilisateur dispose d'une version spécifique d'un logiciel installé, en particulier du connecteur MySQL, tous en utilisant c #. Dans le registre, MySQL contient une entrée de version. Donc, ce que j'essaie d'accomplir est la suivante.

Mon application démarre. Quelque part dans le code de démarrage, je dois effectuer les opérations suivantes dans l'ordre. Vérifiez si l'utilisateur a le connecteur MySQL installé, qui se trouve à l'adresse ...

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

Si l'utilisateur a le connecteur installé, je voulais vérifier sa version, qui est stockée sous le nom Nom = "Version" et Data = x.x.x (Image ci-dessous)

Maintenant, si l'utilisateur a une version spécifique installée, je vais exécuter un autre code, d'où je peux prendre.

Quelle serait la meilleure façon de s'y prendre?

enter image description here

EDIT: Voici le code que j’ai actuellement et je reçois une erreur à la ligne 19 (c’est commenté). Mon erreur dit "error CS1001: Identifier Expected "Je n’étais pas capable de comprendre ce que cela voulait dire. Une aide?

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
        }
    }
}
45
Scalahansolo

Vous devez d'abord ajouter using Microsoft.Win32; à votre page de code.

Ensuite, vous pouvez commencer à utiliser les classes 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
}

BEWARE: Sauf si vous avez un accès administrateur, vous ne pourrez probablement pas faire grand chose dans LOCAL_MACHINE. Parfois, même la lecture de valeurs peut être une opération suspecte sans droits d'administrateur.

81
DonBoitnott