c# - invites - make online party invitations
Evite el registro Wow6432Node Redirection (4)
Aquí está el código de trabajo que he desarrollado para leer y escribir SOLO en el 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 usa los métodos OpenBaseKey / OpenSubKey.
Actualmente lo uso para permitir que un servicio de fondo 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 su propio archivo de clase (.cs) y llámelo como tal:
using SimpleSettings;
string mysetting = Settings.read("SETTINGNAME","DEFAULTVALUE");
Estoy tratando de insertar algunas claves de registro simples usando Microsoft.Win32.RegistryKey en c # pero la ruta cambia automáticamente de:
HKEY_LOCAL_MACHINE/SOFTWARE/Test
a
HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Test
Intenté con Google pero solo obtengo resultados vagos y confusos. ¿Alguien ha tratado este tema antes? Algún código de ejemplo sería muy apreciado.
Bajo WOW64, ciertas claves de registro son redirigidas (SOFTWARE). Cuando una aplicación de 32 bits o de 64 bits realiza una llamada de registro para una clave redirigida, el redirector de registro intercepta la llamada y la asigna a la ubicación de registro física correspondiente de la clave. Para más información, vea Redirector de Registro .
Puede usar la enumeración de RegistryView en el método RegistryKey.OpenBaseKey para abrir la vista de 32 bits de forma explícita y acceder a HKLM / Software / directamente.
No sé cómo resolverlo usando un archivo .reg. Pero solo en un archivo BAT, como sigue:
Debe agregar /reg:64
al final de la línea de comando. ex:
REG ADD "HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Authentication/LogonUI/Background" /v "OEMBackground" /t REG_DWORD /d 0x00000001 /f /reg:64
Fuente: Wow6432Node y cómo implementar la configuración del Registro en sistemas de 64 bits a través de Sccm
Puede usar RegistryKey.OpenBaseKey para resolver este problema:
var baseReg = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var reg = baseReg.CreateSubKey("Software//Test");