Lettura e scrittura nel Registro di sistema mediante lo spazio dei nomi Microsoft.Win32 (Visual Basic)

My.Computer.Registry dovrebbe essere in grado di soddisfare le esigenze di base della programmazione con il Registro di sistema, ma è possibile usare anche le classi Registry e RegistryKey dello spazio dei nomi Microsoft.Win32 di .NET.

Chiavi nella classe Registry

La classe Registry include le chiavi di base del Registro di sistema che è possibile usare per accedere alle sottochiavi e ai relativi valori. Le chiavi di base sono di sola lettura. La tabella seguente elenca e descrive le sette chiavi esposte dalla classe Registry.

Chiave Descrizione
ClassesRoot Definisce i tipi di documento e le relative proprietà.
CurrentConfig Contiene informazioni non specifiche dell'utente sulla configurazione hardware.
CurrentUser Contiene informazioni sulle preferenze dell'utente corrente, ad esempio le variabili di ambiente.
DynData Contiene i dati dinamici del Registro di sistema, ad esempio quelli usati dai driver delle periferiche virtuali.
LocalMachine Contiene cinque sottochiavi (Hardware, SAM, Security, Software e System) in cui sono disponibili i dati di configurazione relativi al computer locale.
PerformanceData Contiene informazioni sulle prestazioni per i componenti software.
Users Contiene informazioni sulle preferenze predefinite degli utenti.

Importante

È più sicuro scrivere dati per l'utente corrente (CurrentUser) che non per il computer locale (LocalMachine). Quando la chiave che si sta creando è stata precedentemente creata da un altro processo, probabilmente dannoso, si verifica una condizione comunemente definita "squatting". Per evitare che si verifichi tale situazione, usare un metodo, ad esempio GetValue, che restituisce Nothing se la chiave non esiste già.

Lettura di un valore dal Registro di sistema

Il codice seguente illustra come leggere una stringa da HKEY_CURRENT_USER.

Dim regVersion As Microsoft.Win32.RegistryKey
Dim keyValue = "Software\\Microsoft\\TestApp\\1.0"
regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(keyValue, False)
Dim intVersion As Integer = 0
If regVersion IsNot Nothing Then
    intVersion = regVersion.GetValue("Version", 0)
    regVersion.Close()
End If

Il codice seguente legge, incrementa e quindi scrive una stringa in HKEY_CURRENT_USER.

Dim regVersion = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
                  "SOFTWARE\\Microsoft\\TestApp\\1.0", True)
If regVersion Is Nothing Then
    ' Key doesn't exist; create it.
    regVersion = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(
                 "SOFTWARE\\Microsoft\\TestApp\\1.0")
End If

Dim intVersion As Integer = 0
If regVersion IsNot Nothing Then
    intVersion = regVersion.GetValue("Version", 0)
    intVersion = intVersion + 1
    regVersion.SetValue("Version", intVersion)
    regVersion.Close()
End If

Vedi anche