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

Как удалить значение реестра в С#

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

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

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

4b9b3361

Ответ 1

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

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 для получения дополнительной информации.

Ответ 2

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

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);   
}

Ответ 3

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

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