С# работа с реестром

323
13 апреля 2017, 15:08

Требуется получить данные по умолчанию из реестра. Цель в том что бы достать Current system local, но не получется так как в реестре по умолчанию "Default" 2 записи и мне нужна именно вторая запись.

Реестр:

RegistryKey curl_lang = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Nls\Locale");
string curl_lang_dump = curl_lang.GetValue("").ToString();

Получаю первое значение Default, а второе не могу. Пример с foreach:

string softwareRegLoc = @"SYSTEM\CurrentControlSet\Control\Nls\";
        RegistryKey regKey = Registry.LocalMachine.OpenSubKey(softwareRegLoc, false);
        foreach (string subKeyName in regKey.GetSubKeyNames())
        {
            RegistryKey subKey = regKey.OpenSubKey(subKeyName);
            if(subKey.ToString() == @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Locale")
            {
                foreach(string a in subKey.GetValue(""))
                {
                    string softwareName =  a.ToString();
                    Console.WriteLine(softwareName+"test");
                }
            }   
        } 
Answer 1

Скорее всего у вас ошибка

Оператор foreach не работает с переменными типа "object", так как "object" не содержит открытого определения для "GetEnumerator".

потому что subKey имеет единственное значение (а не список).

string softwareRegLoc = @"SYSTEM\CurrentControlSet\Control\Nls\";
            RegistryKey regKey = Registry.LocalMachine.OpenSubKey(softwareRegLoc, false);
            foreach (string subKeyName in regKey.GetSubKeyNames())
            {
                RegistryKey subKey = regKey.OpenSubKey(subKeyName);
                if (subKey.ToString() == @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Locale")
                {
                    var i = subKey.GetValue("");
                    Console.WriteLine(i);
                    //foreach (string a in subKey.GetValue(""))
                    //{
                    //  string softwareName = a.ToString();
                    //  Console.WriteLine(softwareName + "test");
                    //}
                }

            }

Получаем Current system local 00000419

А что у вас дальше не получается - непонятно. Какую вам вторую запись нужно?

Если вы хотите получить Default то добавьте

var i2 = subKey.GetValue("(Default)");
READ ALSO
Bind значения к ресурсу приложения

Bind значения к ресурсу приложения

Пытался создать привязку значения к PropertiesSettings

214
Как сделать function PHP и не сломать мозг

Как сделать function PHP и не сломать мозг

Доброго времени сутокНужна ваша помощь, вторые сутки сижу над задачей

265
Создание capability

Создание capability

Помогите решить задачуНужно создать отдельную сущность (новый тип поста) при активации плагина

309
Замена массива в многомерном массиве

Замена массива в многомерном массиве

Подскажите как проще сделать замену массивов в многомерном массиве

244