Spesso si ha la necessità di archiviare/recuperare delle informazioni all'interno del registro di windows.
Il seguente snippet (parte del SecurityWrapper che sto completando proprio ora) include due metodi che possono essere decisamente di aiuto.

Come si può notare all'interno del codice è presente una proprietà di nome NomeAzienda, spesso la valorizzo con il nome dell'azienda cliente.  A voi la scelta se tenerla o no.

class ReadWriteWinRegistry
{
        
// di default lascio CodePlex
        
private string nomeazienda = "CodePlex Projects";

        
/// 
        /// Il nome dell'azienda che produce il software
        
/// 

        
public string NomeAzienda
        {
            
get return nomeazienda; }
            
set
            
{
                
if (value == null)
                {
                    
throw new InvalidValue("Specificare il valore di NomeAzienda");
                }
                
else
                
{
                    nomeazienda = 
value;
                }
            }
        }
        
        
/// 
        /// Scrive un valore nel registry
        
/// 

        /// 
Il nome del progetto a cui si sta lavorando
        /// 
Il nome della chiave in cui l'informazione verrà registrata
        /// 
Il valore che andrà ad essere archiviato
        
public void WriteInRegistry(string NomeProgetto, string NomeChiave, string Valore)
        {
            
// Work in LocalMachine Archive
            
RegistryKey Chiave1 = Registry.LocalMachine;
            
            
// Create the SubKey
            
Chiave1.CreateSubKey(@"SOFTWARE\" + NomeAzienda + @"\" + NomeProgetto);
            
// Open the subkey
            
RegistryKey Chiave2 = Chiave1.OpenSubKey(@"SOFTWARE\" + NomeAzienda + @"\" + NomeProgetto, true);
            
            
// and then set the value
            
Chiave2.SetValue(NomeChiave, valore);

            
#region CleanUp Resourcers
            
Chiave2.Close();
            Chiave2 = 
null;

            Chiave1.Close();
            Chiave1 = 
null;
            
#endregion
        
}
        
                
/// 
        /// Ritorna il valore della chiave specificata per il gruppo di lavoro
        
/// 

        /// 
Il nome del progetto a cui è associata la chiave
        /// 
Il nome della chiave che si vuole recuperare
        /// 
Il valore archiviato
        
public string ReadRegistry(string NomeProgetto, string NomeChiave)
        {
            RegistryKey Chiave1 = Registry.LocalMachine;
            RegistryKey Chiave2 = Chiave1.OpenSubKey(@"SOFTWARE\" + NomeAzienda + @"\" + NomeProgetto, 
false);

            
string myvalue = string.Empty;

            
try
            
{
                myvalue = Chiave2.GetValue(NomeChiave).ToString();
            }
            
catch (NullReferenceException)  // There's no key in the win registry
            
{
                
throw new NullReferenceException("La Chiave " + NomeChiave + " non è presente");
            }
            
catch (Exception genEx)
            {
                
throw genEx;
            }
            
            
#region CleanUp Resources
            
Chiave2.Close();
            Chiave2 = 
null;

            Chiave1.Close();
            Chiave1 = 
null;
            
#endregion
            return 
myvalue;
        }
}

Buon Sabato