Aquí está el código de trabajo que he desarrollado a leer y escribir sólo la Registro de 32 bits. Funciona tanto en aplicaciones de 32 bits como de 64 bits. La llamada de 'lectura' actualiza el registro si el valor no está establecido, pero es muy obvio cómo eliminarlo. Requiere .Net 4.0 y utiliza los métodos OpenBaseKey/OpenSubKey.
Actualmente lo uso para permitir que un servicio en segundo plano de 64 bits y una aplicación de bandeja de 32 bits accedan a las mismas claves de registro sin problemas.
using Microsoft.Win32;
namespace SimpleSettings
{
public class Settings
{
private static string RegistrySubKey = @"SOFTWARE\BlahCompany\BlahApp";
public static void write(string setting, string value)
{
using (RegistryKey registryView = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32))
using (RegistryKey registryCreate = registryView.CreateSubKey(RegistrySubKey))
using (RegistryKey registryKey = registryView.OpenSubKey(RegistrySubKey, true))
{
registryKey.SetValue(setting, value, RegistryValueKind.String);
}
}
public static string read(string setting, string def)
{
string output = string.Empty;
using (RegistryKey registryView = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32))
using (RegistryKey registryCreate = registryView.CreateSubKey(RegistrySubKey))
using (RegistryKey registryKey = registryView.OpenSubKey(RegistrySubKey, false))
{
// Read the registry, but if it is blank, update the registry and return the default.
output = (string)registryKey.GetValue(setting, string.Empty);
if (string.IsNullOrWhiteSpace(output))
{
output = def;
write(setting, def);
}
}
return output;
}
}
}
Uso: Ponga esto en él del archivo de clase propia (Cs) y llamarlo como tal:
using SimpleSettings;
string mysetting = Settings.read("SETTINGNAME","DEFAULTVALUE");
posible duplicado de [Visual Studio 2010 Configuración del Proyecto 64 bits Crear problema clave de registro] (http://stackoverflow.com/questions/7384270/visual-studio-2010-setup-project-64-bit-create-registry-key-issue) –