Registry.LocalMachine.OpenSubKey() возвращает null
Я получаю нуль от этой попытки получить доступ к реестру Windows:
using (RegistryKey registry = Registry.LocalMachine.OpenSubKey(keyPath))
keyPath SOFTWARE\\TestKey
Ключ находится в реестре, так почему он не находит его под кустом локального компьютера?
Ответы
Ответ 1
В своем комментарии к Дане вы сказали, что получили доступ к учетной записи ASP.NET. Однако вы подтвердили, что это учетная запись, на которой работает сайт? Олицетворение и пользователь анонимного доступа могут быть легко упущены.
UNTESTED CODE:
Response.Clear();
Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);
Response.End();
Ответ 2
Это может произойти, если вы на 64-битной машине. Сначала создайте вспомогательный класс (требуется .NET 4.0 или новее):
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);
}
}
Использование:
string keyPath = @"SOFTWARE\MyApp\Settings";
string keyName = "MyAppConnectionStringKey";
object connectionString = RegistryHelpers.GetRegistryValue(keyPath, keyName);
Console.WriteLine(connectionString);
Console.ReadLine();