Как добавить вложенный ключ реестра / значение в C #? - PullRequest
4 голосов
/ 17 ноября 2010

Учитывая путь реестра "\ a \ b \ c \ d", я хотел бы добавить значение к ключу "d". Загвоздка в том, что я не знаю, существуют ли a, b или c, и я хочу, чтобы код генерировал их, если они не существуют. Есть ли быстрый способ (используя какой-то метод .NET, которого я не видел) сделать это? Я мог бы пойти по пути перебора ключей реестра и использовать методы OpenSubKey / GetValue / SetValue для выполнения процесса, но хотел бы не изобретать велосипед заново, если смогу ...

Примечание: поведение, которое я ищу, такое же, как и при запуске файла .reg (при этом создаются необходимые подразделы).

Спасибо

Ассаф

Ответы [ 2 ]

13 голосов
/ 17 ноября 2010

Я не знаю встроенного одиночного звонка, который вы можете сделать, чтобы сделать это.Однако вам не нужно вызывать OpenSubKey / GetValue и т. Д. Вызов CreateSubKey создаст новый ключ или откроет существующий ключ, если он существует.

RegistryKey regKey = startingRootKey;
string[] RegKeys = pathToAdd.split('\'');
foreach (string key in RegKeys) {
    regKey = regKey.CreateSubKey(key);
}
regKey.SetValue("ValueName", "Value");

Игнорировать лишние 'втам мне нужно было, чтобы форматирование выглядело правильно.??

Кроме того, убедитесь, что вы проверяете наличие исключений при добавлении разделов реестра ... существует много проблем с безопасностью и путями, которые могут пойти не так.Список исключений для ловушки: здесь .

EDIT Я делаю это слишком сложно!Я только что проверил ... следующее будет делать именно то, что вы хотите:

RegistryKey regKey = startingRootKey;
regKey = regKey.CreateSubKey(@"a\b\c\d");
regKey.SetValue("ValueName", "Value");
regKey.Close();

Он достаточно умен, чтобы разобрать вложенный путь.Просто убедитесь, что у вас есть символ @, иначе строка будет выглядеть так, как если бы она была экранирована.

0 голосов
/ 17 ноября 2010

Я не думаю, что есть что-то встроенное, но делим строку по пути в реестре, а затем перебираем его и делаем CreateSubKey (вместо OpenSubKey, поэтому он создает недостающие) на каждом на мой взгляд, все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...