J'obtiens un retour nul de cette tentative d'accès au registre Windows:
using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath))
keyPath est SOFTWARE\\TestKey
La clé est dans le registre, alors pourquoi ne la trouve-t-elle pas dans la ruche Local Machine?
Dans votre commentaire à Dana, vous avez indiqué que vous avez donné accès au compte ASP.NET. Cependant, avez-vous vérifié que c'est le compte sous lequel le site est exécuté? L'identité d'identité et l'utilisateur à accès anonyme peuvent être facilement ignorés.
CODE NON LIST:
Response.Clear();
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
Response.End();
Cela peut arriver si vous êtes sur une machine 64 bits. Créez d'abord une classe d'assistance (requiert .NET 4.0 ou version ultérieure):
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);
}
}
Usage:
string keyPath = @"SOFTWARE\MyApp\Settings";
string keyName = "MyAppConnectionStringKey";
object connectionString = RegistryHelpers.GetRegistryValue(keyPath, keyName);
Console.WriteLine(connectionString);
Console.ReadLine();
Juste besoin de le changer de
using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath))
à
using (RegistryKey registry = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default).OpenSubKey(keyPath))
(Utilisez RegistryKey
au lieu de Registry
, ajoutez RegistryView
et placez Hive-Local Machine en tant que paramètre de méthode.)