Как удалить ключ реестра? - PullRequest
0 голосов
/ 07 марта 2011

Я пытаюсь удалить какой-то ключ реестра, но VS постоянно говорит мне, что я не могу записать в ключ реестра, и я не понимаю, почему:

 public void refInstall()  
 {  
     RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Installer\Folders\MyApp");  
     foreach(string subKeyName in regKey.GetValueNames())  
     {  
         bool exist = Directory.Exists(subKeyName);  
         if (!exist)  
         {  
             regKey.DeleteSubKeyTree(subKeyName);  
             Console.WriteLine(subKeyName + ": N'EXISTE PAS");  
             }  
         }  
     }  
}

Ответы [ 2 ]

4 голосов
/ 07 марта 2011

У вас нет прав на запись в HKLM. Вам нужно будет работать с повышенными привилегиями, чтобы это удалось.

Всегда было так, что права на HKLM были ограничены членами группы администраторов. То, что изменилось, было в Vista, когда появился UAC, и пользователи обычно запускались без прав администратора.

Возможно, это не то, что вы хотите услышать, но вам нужно избавиться от привычки писать в эту область реестра и найти другой способ достижения своих целей. Единственное время, в течение которого настольное приложение может ожидать доступ на запись в HKLM (или в каталог Program Files), - это время установки.

Как только вы исправите свой код, как описано в arx, вам придется заняться этой проблемой.

1 голос
/ 07 марта 2011

У этого есть одна очевидная проблема:

Вы просматриваете реестр значения , но пытаетесь удалить их, как если бы они были ключами .

Если вы хотите работать со значениями, используйте RegistryKey.DeleteValue.

Если вы хотите работать с ключами, используйте RegistryKey.GetSubKeyNames.

Другая проблема:

Вы открываете реестрключ с доступом только для чтения.Вам нужно (обратите внимание на дополнительный bool в конце):

RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Installer\Folders\MyApp", true);

(Удалены комментарии о работе Directory.Exists, действующей в файловой системе. Это преднамеренно, как поясняет darky89 ниже.)

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