Manipolare il registro con C#

Mattepuffo's logo
Manipolare il registro con C#

Manipolare il registro con C#

Articolo riscritto 23-10-2016

Nella precedente versione di questo articolo, mancavano alcune accortezze che si sono rese necessarie quando ho usato questo codice in Windows 10 a 64 BIT.

Vediamo, quindi, una versione migliore di codice per manipolare il registro con C#.

Ci avvaliamo sempre della classe RegistryKey.

Come notate ci sono metodi per fare praticamente tutto.

Il concetto però è sempre lo stesso: prima si "apre" una chiave (in sola lettura o in scrittura a seconda di quello che si vede fare) e poi si eseguono le operazioni:

  • creazione
  • elminazione
  • lettura
  • .....

Per l'esempio corrente ho creato un valore TEST di tipo stringa sotto SOFTWARE7-Zip in LOCAL_MACHINE.

Createla dove volete ovviamente, ma fate sempre attenzione a quali chiavi e valori andate a toccare.

Questo il codice:

    class Program
    {
        static void Main()
        {
            Console.WriteLine(change("TEST", ""));
            Console.ReadLine();
        }
 
        private static String change(String key, String val)
        {
            RegistryKey regKey;
            if (Environment.Is64BitOperatingSystem)
            {
                regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE7-Zip", true);
            }
            else
            {
                regKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(@"SOFTWARE7-Zip", true);
            }
 
            String value = regKey.GetValue(key).ToString();
            if (!String.IsNullOrEmpty(value))
            {
                regKey.SetValue(key, val, RegistryValueKind.String);
                regKey.Close();
                return "Chiave modificata con successo";
            }
            else
            {
                regKey.Close();
                return "La chiave non esiste";
            }
        }
    }

Prima di tutto andiamo a controllare se siamo in ambiente 32 o 64 BIT, cosa a me si è resa necessaria.

Poi apriamo la chiave che ci interessa; con il parametro true impostiamo l'apertura in scrittura.

In questo caso usiamo il membro statico LocalMachine in quanto la chiave che ci interessa sta li.

Ovviamente ne abbiamo per ogni chiave; potete guaradare qua.

Poi controlliamo che il valore di TEST non sia vuoto.

Infine settiamo un valore vuoto, specificando il tipo di valore con RegistryValueKind.String.

Poi chiudiamo la chiave.

Se doveste avere problemi ad accedere al registro, in quanto Windows vi blocca, dovete aggiungere un file app.manifest.

Al posto di questa riga:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

mettete questa e ricompilate il programma:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

A questo punto non dovreste avere più problemi.

Enjoy!


Condividi

Commentami!