Come accedere al registro di Windows utilizzando C #

Microsoft .Net consente di accedere al registro di Windows a livello di programmazione per archiviare e recuperare i dati. Il registro di Windows è un database gerarchico che comprende una raccolta di chiavi, sottochiavi, chiavi predefinite, hive e voci di valore e può essere utilizzato per memorizzare dati specifici del sistema o dell'applicazione. L'MSDN afferma: "Il registro funge da archivio centrale di informazioni per il sistema operativo e le applicazioni su un computer".

Puoi sfruttare il registro di Windows per memorizzare i metadati di configurazione delle tue applicazioni in modo da poterli recuperare in un secondo momento, se necessario.

Il registro di Windows memorizza i seguenti tipi di informazioni in modo gerarchico.

  1. Informazioni sul profilo utente
  2. Informazioni sull'hardware del sistema
  3. Impostazioni proprietà
  4. Informazioni sui programmi installati nel sistema

Nota che dovresti prestare la massima attenzione quando maneggi il registro di Windows. Si consiglia di eseguire il backup del registro prima di apportare modifiche in modo da poter ripristinare tali modifiche se necessario. È possibile creare un backup del registro di Windows seguendo questi passaggi.

  1. Da Start, seleziona Esegui
  2. Digita Regedit e premi Invio per richiamare l'editor del registro di Windows
  3. Ora fai clic su File -> Esporta
  4. Nella finestra di dialogo "Salva con nome" specificare un nome
  5. Seleziona un ramo particolare o l'opzione "Tutto" per esportare le informazioni di registro complete
  6. Fare clic su Salva

Le informazioni sul registro verranno salvate in un file .reg con il nome specificato. È ora possibile manipolare il database del registro a livello di programmazione.

Lavorare con il registro di Windows in C #

È possibile leggere, scrivere ed eliminare a livello di codice chiavi, sottochiavi e valori dal registro di Windows. Puoi considerare le chiavi di registro come cartelle nel tuo sistema Windows. Nota che una chiave può avere sottochiavi, più o meno allo stesso modo in cui una cartella può contenere sottocartelle al suo interno. Per lavorare con il registro di Windows utilizzando C #, puoi sfruttare la classe Registry nello spazio dei nomi Microsoft.Win32.

Analizziamo ora un codice. In questa sezione esploreremo come creare, leggere o eliminare sottochiavi dal registro di Windows utilizzando C #.

Per creare una nuova chiave secondaria è possibile sfruttare il metodo CreateSubKey come mostrato di seguito.

Registry.CurrentUser.CreateSubKey(@"SOFTWARE\");

Il metodo CreateSubKey crea una nuova chiave secondaria e la restituisce: il tipo restituito è RegistryKey. Il frammento di codice seguente mostra come creare una nuova sottochiave denominata e memorizzare i valori-chiave al suo interno.

using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\"))

           {

               key.SetValue("Key 1", "Value 1");

               key.SetValue("Key 2", "Value 2");              

               key.Close();

           }  

Il metodo seguente può essere utilizzato per leggere un valore da una sottochiave.

static string ReadSubKeyValue(string subKey, string key)

       {

           string str = string.Empty;

           using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(subKey))

           {

               if (registryKey != null)

               {

                   str = registryKey.GetValue(key).ToString();

                   registryKey.Close();

               }

           }

           return str;

       }

Il metodo ReadSubKeyValue accetta una sottochiave e una chiave come parametro e ne restituisce il valore. Ecco come chiamare il metodo ReadSubKeyValue.

static void Main(string[] args)

       {

           string subKey = @"SOFTWARE\";

           string str = ReadSubKeyValue(subKey, "Key 1");

           Console.WriteLine(str);

           Console.Read();

       }

È inoltre possibile eliminare una sottochiave utilizzando il metodo statico DeleteSubKey. Il listato di codice seguente illustra come eseguire questa operazione.

static bool DeleteKey(string KeyName)

       {

           try

           {

               Registry.CurrentUser.DeleteSubKey(KeyName);

               return true;

           }

           catch

           {

               return false;

           }

       }

Il metodo precedente restituisce true se l'eliminazione della sottochiave ha esito positivo, altrimenti false. Potresti voler controllare se la sottochiave esiste prima di tentare di eliminarla - in questo modo le modifiche alle eccezioni generate sono minime. Lascio a te la modifica del codice sopra per incorporare questa modifica.

È inoltre possibile recuperare tutte le sottochiavi di una particolare chiave utilizzando il metodo GetSubKeyNames della classe RegistryKey. Il frammento di codice seguente illustra come ottenere questo risultato.

static List GetChildSubKeys(string key)

       {

           List lstSubKeys = new List();

           try

          {

               using (RegistryKey registryKey = Registry.CurrentUser.OpenSubKey(key))

               {

                   if (!(registryKey == null))

                   {

                       string[] temp = registryKey.GetSubKeyNames();

                       foreach (string str in temp)

                       {

                           lstSubKeys.Add(str);

                       }

                   }

               }

           }

           catch

           {

               //Write your custom exception handling code here

           }

           return lstSubKeys;

       }

Per utilizzare il metodo GetChildSubKeys e recuperare tutte le sottochiavi di una determinata chiave, è possibile scrivere il codice seguente.

List lstSubKeys = GetChildSubKeys(subKey);