2009-08-12 17 views
27

me sale un nulo de volver de este intento de acceso al registro de Windows:Registry.LocalMachine.OpenSubKey() devuelve un valor nulo

using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath)) 

keyPath es SOFTWARE\\TestKey

La clave está en el registro, así que por qué es no lo encuentra debajo de la colmena de la máquina local?

+1

¿Usted está escapando adecuadamente KeyPath? ¿Es "SOFTWARE \\ TestKey", y no "SOFTWARE \ TestKey"? – Michael

+0

sí, lo publiqué mal. En realidad está configurado para usar \\ – PositiveGuy

+1

Así que esto ha funcionado bien en la PC de mi jefe. No hay razón por la que no debería estar aquí. Le di acceso a la cuenta asp.net porque estoy ejecutando el servidor web VS y todavía devuelve nulo. – PositiveGuy

Respuesta

2

En su comentario a Dana, dijo que le dio acceso a la cuenta ASP.NET. Sin embargo, ¿ha verificado que esa es la cuenta bajo la que se ejecuta el sitio? Suplantar y el usuario de acceso anónimo puede ser fácilmente ignorado.

CÓDIGO sin probar:

Response.Clear(); 
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName); 
Response.End(); 
+0

¿Cómo puedo averiguar en qué cuenta se ejecuta el sitio sin tener que escribir código para exponer? – PositiveGuy

+0

Bueno, lo anterior es, en general, la forma en que soluciono los problemas de la cuenta, aunque agrego un cheque que proviene de mi dirección IP para que no todos puedan verlo. –

57

Puede ocurrir si se encuentra en una máquina de 64 bits. Crear una clase de ayuda en primer lugar (requiere .NET 4.0 o posterior):

public class RegistryHelpers 
{ 

    public static RegistryKey GetRegistryKey() 
    { 
     return GetRegistryKey(null); 
    } 

    public static RegistryKey GetRegistryKey(string keyPath) 
    { 
     RegistryKey localMachineRegistry 
      = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, 
             Environment.Is64BitOperatingSystem 
              ? RegistryView.Registry64 
              : RegistryView.Registry32); 

     return string.IsNullOrEmpty(keyPath) 
      ? localMachineRegistry 
      : localMachineRegistry.OpenSubKey(keyPath); 
    } 

    public static object GetRegistryValue(string keyPath, string keyName) 
    { 
     RegistryKey registry = GetRegistryKey(keyPath); 
     return registry.GetValue(keyName); 
    } 
} 

Uso:

string keyPath = @"SOFTWARE\MyApp\Settings"; 
string keyName = "MyAppConnectionStringKey"; 

object connectionString = RegistryHelpers.GetRegistryValue(keyPath, keyName); 

Console.WriteLine(connectionString); 
Console.ReadLine(); 
+9

Cabe señalar que esta respuesta requiere .NET 4.0 o superior. – ganders

+1

+1 Esto me ayudó mucho, gracias. –

+1

¡Gracias! ¡Me salvaste el día! – raven

Cuestiones relacionadas