Come leggere il valore di una chiave di registro c #

All’avvio della mia applicazione sto provando a vedere se l’utente ha una versione specifica di un software installato, in particolare il connettore MySQL, utilizzando tutti c #. Nel registro, MySQL contiene una voce di versione. Quindi quello che sto cercando di realizzare è questo.

La mia app si avvia. Da qualche parte nel codice di avvio ho bisogno di fare le seguenti cose in ordine. Verifica se l’utente ha installato il connettore MySQL, che si trova a …

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

Se l’utente ha installato il connettore, volevo controllare quale versione hanno, che è memorizzata come Name = “Version” e Data = xxx (immagine sotto)

Ora se l’utente ha una versione specifica installata, eseguirò un altro codice, da cui posso prelevare.

Quale sarebbe il modo migliore di fare questo?

inserisci la descrizione dell'immagine qui

EDIT: Di seguito è il codice che ho attualmente e sto ricevendo un errore sulla riga 19 (È commentato). Il mio errore dice ” error CS1001: Identifier Expected ” Non ero in grado di capire cosa significa. Qualsiasi aiuto?

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

È necessario innanzitutto aggiungere using Microsoft.Win32; alla tua pagina di codice.

Quindi è ansible iniziare a utilizzare le classi del 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 } 

ATTENZIONE: a meno che tu non abbia accesso come amministratore, è improbabile che tu possa fare molto in LOCAL_MACHINE . A volte anche la lettura dei valori può essere un’operazione sospetta senza diritti di amministratore.