Home Page Home Page Articoli Giochiamo un po' con il registro di Windows!

Giochiamo un po' con il registro di Windows!

Scopriamo uno degli elementi fondamentali del sistema operativo Windows e vediamo come è possibile accedervi tramite le classi offerte dal .NET Framework: Microsoft.Win32.Registry e Microsoft.Win32.RegistryKey
Autore: David De Giacomi Livello:
N.B. Questo articolo parla del registro di Windows. Prego chi vuole fare esperimenti di prestare massima attenzione e di non osare troppo!

Il Registro di Windows
Il registro è un repository centralizzato del sistema operativo Windows. E' una parte fondamentale di tutto il sistema, infatti senza di esso il funzionamento del sistema stesso sarebbe a dir poco difficoltoso se non estremamente complicato.
Ad alcuni di noi è già successo di ritrovarsi il registro corrotto e di dover reinstallare da capo alcune applicazioni se non direttamente tutto il sistema operativo!
Il registro ha una struttura ad albero estremamente organizzata e profonda diversi livelli. E' suddiviso in chiavi primarie, chiavi, sottochiavi e valori.
Per accedervi è necessario lanciare il comando regedit.exe da Start->Esegui.
Come potete vedere nel registro di Windows ci sono solitamente 5 Macro-chiavi molto importanti che qui elenco:

  • HKEY_CLASSES_ROOT

  • E' un puntatore alla chiave HKEY_LOCAL_MACHINE\Software\Classes e contiene principalmente le associazioni dei file, i programmi predefiniti con cui vengono aperti i file, le registrazioni dei componenti COM/OLE.

  • HKEY_CURRENT_USER

  • Punta ad una chiave di HKEY_USER. Di solito contiene informazioni riguardanti l'utente loggato in quel momento.

  • HKEY_LOCAL_MACHINE

  • Contiene informazioni riguardanti l'hardware e il software presente sul sistema.

  • HKEY_USERS

  • E' composto da varie sotto chiavi (es. S-1-5-18) che corrispondo ad altrettanti utenti presenti nel sistema.

  • HKEY_CURRENT_CONFIG

  • E' un puntatore alla chiave HKEY_LOCAL_MACHINE\Config. Contiene informazioni riguardanti le impostazioni dell'hardware installato.


Oltre a queste, in alcune versioni di Windows, se ne affiancano altre due:

  • HKEY_DYN_DATA

  • Contiene informazioni immagazzinate nella memoria RAM riguardanti l'hardware e le periferiche aggiunte o rimosse dal sistema. (supportato solo in Windows98/ME)

  • HKEY_PERFORMANCE_DATA

  • Contiene dati e informazioni relative alle performance del sistema visibili anche in dettaglio tramite l'utilità PerfMon di Windows.


Qual è il ProductID di Windows?
C'è un solo modo per scoprirlo! Utilizzare il registro.
Scorrendo i vari rami del registro ci si può imbattere in informazioni a volte molto comode e comprensibili, a volte invece poco comprensibili e magari neanche documentate, giustamente.

Una molto comoda da reperire è il ProductID di Windows (Attenzione questo non è il codice di installazione di Windows ma il codice del prodotto che appare cliccando dal pannello di controllo sull'icona del Sistema, screenshot qui sotto).

Il ProductID di Windows
Il ProductID di Windows


Lettura di una chiave
Questa è la classe che contiene i campi (Fields) corrispondenti alle 7 macro chiavi elencate precedentemente.
Ora vedremo com'è semplice utilizzarla con la RegistryKey per accedere ad una chiave di registro.
Con solo due righe di codice avremo raggiunto il nostro obbiettivo, eccole:


RegistryKey key=Registry.LocalMachine.OpenSubKey "SOFTWARE\\Microsoft\\Windows\\CurrentVersion");
Console.WriteLine(rkey.GetValue("ProductID").ToString());
key.Close();


Come potete vedere, abbiamo definito una chiave chiamata "key".
Con Registry.LocalMachine indichiamo al framework che vogliamo utilizzare la macro chiave HKEY_LOCAL_MACHINE e con il metodo "OpenSubKey" accediamo alla chiave SOFTWARE\Microsoft\Windows\CurrentVersion dov'è immagazzinato il nostro codice, come potete vedere dalla screenshot qui sotto:

Il registro di Windows con la chiave dell'esempio selezionata
Il registro di Windows con la chiave dell'esempio selezionata


La seconda riga di codice quindi va a recupere con il metodo "GetValue" il valore di ProductID lo trasforma in stringa e viene stampato a Console in output.
La terza riga, non meno importante delle altre, chiude la referenza alla chiave. E' necessario sempre chiudere il riferimento per non incorrere in malfunzionamenti eventuali.

Creazione di una chiave e di valori
Allo stesso modo è possibile creare dalla nostra applicazione delle sottochiavi ed eventualmente dei valori. Pensiamo ad esempio di salvare la posizione della finestra in modo da riposizionarla all'apertura seguente nello stesso posto.
Utilizziamo delle coordinate X e Y che salviamo nel registro nella chiave HKEY_LOCAL_MACHINE\Software\dotNetHell.it che verrà creata appositamente.


RegistryKey key=Registry.LocalMachine.CreateSubKey("SOFTWARE\\dotNetHell.it");
key.SetValue("PosizioneX","140");
key.SetValue("PosizioneY","80");
key.Close();


Il risultato è questo:

Le due coordinate appena create
Le due coordinate appena create


Eliminazione di una chiave
Portiamo a termine il nostro lavoro, ripulendo il registro dalle due chiavi appena create.


RegistryKey key=Registry.LocalMachine.CreateSubKey("SOFTWARE");
key.DeleteSubKey("dotNetHell.it");
key.Close();


La seconda istruzione elimina definitivamente la chiave "dotNetHell.it" e contemporaneamente i valori ad essa associati (PosizioneX e PosizioneY).
Per chi volesse avere più controllo della situazione e magari fosse più interessato, presento qui di seguito l'utilizzo del metodo "DeleteValue" che permette di eliminare i valori singolarmente.


RegistryKey key=Registry.LocalMachine.CreateSubKey("SOFTWARE");
key.DeleteValue("PosizioneX");
key.DeleteValue("PosizioneY");
key.Close();


Il codice di questo esempio è disponibile per lo scaricamento sia in linguaggio C# che in VB.NET

Conclusioni
Come vedete il supporto al registro di Windows è molto semplificato e si può interagire con poche istruzioni ed in modo rapido.
Attenzione però a non combinare danni, mi raccomando!
Voto medio articolo: 4.3 Numero Voti: 23

File allegati


David De Giacomi

David De Giacomi

Unico e irripetibile Profilo completo

Articoli collegati

Utilizzare NUnit per testare codice .NET
Scopriamo in questo articolo come utilizzare il popolare framework Open Source NUnit per effettuare Unit Testing del codice .NET aumentandone la qualità e riducendo il numero di eventuali bugs.
Autore: Michela Zangarelli | Difficoltà:
SQL Injection, che cosa è e come difendersi
I malintenzionati sono sempre dietro l'angolo. Il SQL Injection è una delle pratiche più semplici da utilizzare per attaccare un'applicazione poco sicura e violarla o arrecare danni al database. Vediamo che cos'è e come garantire la sicurezza delle applicazioni in modo adeguato.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 4
Visual Studio 2005 Team System
Scopriamo il nuovo IDE di sviluppo che copre interamente l'intero ciclo di vita del software integrando in un solo ambiente più prodotti e studiato apposta per i ruoli di Architect, Developer e Tester.
Autore: Marco Caruso | Difficoltà: | Voto:
Tutorial ADO.NET ed esempi pratici - Parte 2
Dopo aver fatto un po' di teoria su ADO.NET nella Parte 1 dell'articolo procediamo con un Tutorial pratico che ci condurrà alla creazione di un'applicazione basilare che consenta l'accesso e la modifica dei dati su un Database Access.
Autore: Stefano Passatordi | Difficoltà: | Commenti: 10
Introduzione ad ADO.NET - Parte 1
ADO.NET è uno dei componenti chiave del .NET Framework. Eredita il nome dal vecchio ADO ma è praticamente quasi tutto cambiato. Una nuova architettura, nuovi concetti, nuove funzionalità e nuovi oggetti. Vediamo quali sono e a cosa servono.
Autore: Stefano Passatordi | Difficoltà: | Commenti: 6
Colonne calcolate e parola "Child" con ADO.NET
Una cosa utile di ADO.NET e' la possibilita di aggiungere ad una colonna da codice il cui valore sia il risultato di operazioni sui dati dei record (o tra valori di altre colonne). Quando si utilizza un dataset con piu tabelle collegate mediante relazioni invece, usando la parola chiave "child" si possono avere delle informazioni riguardanti le tabelle figlio, direttamente nei record della tabella
Autore: Matteo Raumer | Difficoltà: | Voto:
Usare degli indicatori di progresso con Query SQL
Nell'articolo vediamo come sia possibile con un l'aiuto delle classi DataReader e Command di ADO.NET, mostrare un indicatore di progresso che indichi lo stato di avanzamento di una query SQL durante il fetching dei dati.
Autore: Matteo Raumer | Difficoltà: | Voto:
La crittografia e la classe Rijndael
Vediamo come utilizzare una delle tante classi messe a disposizione dal .NET Framework per la crittografia dei dati. In particolare la classe Rijndael implementa un algoritmo di crittografia molto forte diventato famoso negli ultimi anni.
Autore: David De Giacomi | Difficoltà:
DES il famoso standard creato da IBM per la crittografia dei dati
In questo articolo dimostreremo come crittografare dei file usando il .NET Framework e in particolare la classe DESCryptoServiceProvider che implementa l'ormai noto algoritmo di cifratura inventato da IBM negli anni 70 chiamato DES (Data Encryption Standard)
Autore: David De Giacomi | Difficoltà: | Commenti: 2 | Voto:
Cosa sono e come funzionano le funzioni ricorsive?
Ecco tre esempi efficaci che vi spiegano come usare correttamente le funzioni ricorsive, per effettuare ricerche di file e cartelle all'interno del disco fisso, per ricostruire la struttura di un file XML oppure per svuotare determinati controlli in una Form.
Autore: Matteo Raumer | Difficoltà: | Commenti: 2
Costruire Console Applications con Visual Studio .NET
Spiegheremo in questo articolo i passi base fondamentali per costruire Console Applications utilizzando Visual Studio .NET.
Autore: David De Giacomi | Difficoltà: | Voto:
TextReader e TextWriter
Una panoramica su come utilizzare queste due classi che ci permettono di leggere e scrivere file di testo.
Autore: David De Giacomi | Difficoltà: | Commenti: 1 | Voto:
.NET Framework 1.1 Beta
Una prima panormaica sulle novità offerte dal Framework 1.1 che sarà integrato nella prossima versione di Visual Studio .NET 2003.
Autore: David De Giacomi | Difficoltà:
Cosa posso costruire con Visual Studio .NET ?
Un' introduzione sui vari tipi di progetto disponibili in Visual Studio dalle tipiche applicazioni Windows fino alle recenti applicazioni Web e agli innovativi Web Services.
Autore: David De Giacomi | Difficoltà: | Commenti: 1
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5