tags:

views:

4019

answers:

4

I can get/set registry value using Microsoft.Win32.Registry class. For example

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

But i can't delete any value. How to delete registry value?

A: 

RegistryKey.DeleteValue

Sören Kuklau
how to get RegistryKey object
ebattulga
DeleteValue is not static method
ebattulga
+9  A: 

To delete the value set in your question:

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

Look at the docs for Registry.CurrentUser, RegistryKey.OpenSubKey and RegistryKey.DeleteValue for more info.

Jon Skeet
+1  A: 
    RegistryKey registrykeyHKLM = Registry.LocalMachine;
    string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Run\MyApp";
    registrykeyHKLM.DeleteValue(keyPath);
    registrykeyHKLM.Close();
Binoj Antony
non working code
Sergey Mirvoda
Corrected the mistake, it should work now.
Binoj Antony
+2  A: 

To delete all subkeys/values in the tree (~recursively), here's an extension method that I use:

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

Usage:

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