2009-02-10 4 views
27

Я могу получить/установить значения реестра с помощью класса Microsoft.Win32.Registry. Например,Как удалить значение реестра в C#

Microsoft.Win32.Registry.SetValue(
    @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", 
    "MyApp", 
    Application.ExecutablePath); 

Но я не могу удалить никакую ценность. Как удалить значение реестра?

ответ

70

Чтобы удалить значение, установленное в вашем вопросе:

string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run"; 
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true)) 
{ 
    if (key == null) 
    { 
     // Key doesn't exist. Do whatever you want to handle 
     // this case 
    } 
    else 
    { 
     key.DeleteValue("MyApp"); 
    } 
} 

Посмотрите на документы для Registry.CurrentUser, RegistryKey.OpenSubKey и RegistryKey.DeleteValue для получения дополнительной информации.

+1

Как удалить всю папку? предположим, что хочу удалить '@" Software \ TeamViewer ";' –

10
RegistryKey registrykeyHKLM = Registry.LocalMachine; 
string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Run\MyApp"; 

registrykeyHKLM.DeleteValue(keyPath); 
registrykeyHKLM.Close(); 
+0

нерабочий код –

+0

Исправлена ​​ошибка, теперь она должна работать. –

11

Чтобы удалить все подразделы/значения в дереве (~ рекурсивно), вот метод расширения, который я использую:

public static void DeleteSubKeyTree(this RegistryKey key, string subkey, 
    bool throwOnMissingSubKey) 
{ 
    if (!throwOnMissingSubKey && key.OpenSubKey(subkey) == null) { return; } 
    key.DeleteSubKeyTree(subkey); 
} 

Использование:

string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run"; 
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true)) 
{ 
    key.DeleteSubKeyTree("MyApp",false); 
} 
+5

Похоже, что кто-то работает над .NET, подумал, что это тоже хорошая идея :) Был добавлен для .NET 4.0 http://msdn.microsoft.com/en-us/library/dd411622.aspx –

 Смежные вопросы

  • Нет связанных вопросов^_^