Подтвердить что ты не робот

Registry.LocalMachine.OpenSubKey() возвращает null

Я получаю нуль от этой попытки получить доступ к реестру Windows:

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

keyPath SOFTWARE\\TestKey

Ключ находится в реестре, так почему он не находит его под кустом локального компьютера?

4b9b3361

Ответ 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();