The most important things you need to do with the registry - creating, accessing editing and deleting SubKeys and values.
I suppose you already know the basics of using the Windows registry, adding a value or modifying it using the Registry Editor (regedit). Before we start… don’t forget to backup!
Start a new Console Application project in Microsoft Visual C# .NET.
We will use the Microsoft.Win32.Registry and Microsoft.Win32.RegistryKey classes, therefore add the following line so we don’t have to write so much when we shall use this namespace:
using Microsoft.Win32;
Creating SubKeys in the registry
We create a subkey by using the CreateSubKey method. We usually want to create a subkey in HKEY_CURRENT_USER/SOFTWARE that is why we use the following code:
RegistryKey reg = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Geekpedia\\Test");
Adding values to SubKeys
Now we can add a value to the subkey by using the following piece of code:
reg.SetValue("URL", "http://www.geekpedia.com");
As you can see, the code is rather straightforward. We create a value with the name ‘URL’ and the data ‘http://www.geekpedia.com’.
Retrieving data
Further, we shall retrieve the value we just added and store it in a string variable:
string URL = (string)reg.GetValue("URL");
…and display the output:
Console.WriteLine("Before: " + URL);
Changing the values
We change the value of ‘reg’. We specify the same path, but now we also add a ‘true’ boolean at the end. That means we use the overloaded method and ‘true’ means we want the path in write mode.
The overloaded method prototype is:
public RegistryKey OpenSubKey(string name, bool writable);
And here is the code we use:
RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Geekpedia\\Test", true);
Because we opened the SubKey in write mode, we can modify the data:
reg.SetValue("URL", "about:blank");
and store it again in the same variable:
URL = (string)reg.GetValue("URL");
…and display the output:
Console.WriteLine("After: " + URL);
And finally close the opened connection with the registry SubKey and flush:
reg.Close();
Finally, all the code put together looks like this:
using System;
using Microsoft.Win32;
class Class1
{
[STAThread]
static void Main(string[] args)
{
// Create a new SubKey or open it if already exists
RegistryKey reg = Registry.CurrentUser.CreateSubKey("SOFTWARE\\Geekpedia\\Test");
// Add a new value to the SubKey
reg.SetValue("URL", "http://www.geekpedia.com");
// Store it in 'URL' variable
string URL = (string)reg.GetValue("URL");
// Display it
Console.WriteLine("Before: " + URL);
// Open the SubKey this time in write mode
reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Geekpedia\\Test", true);
// Change the value 'URL'
reg.SetValue("URL", "about:blank");
// Store it in the earlier variable
URL = (string)reg.GetValue("URL");
// Display it
Console.WriteLine("After: " + URL);
// Close the registry SubKey and flush
reg.Close();
}
}
Deleting SubKeys
For removing SubKeys from the registry you can use the method with the following prototype:
public void DeleteSubKey(string subkey);
And here is a hands-on example:
// Open SOFTWARE
RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE");
// Delete Geekpedia from SOFTWARE
reg.DeleteSubKeyTree("Geekpedia");
//Close the registry SubKey and flush
reg.Close();
If the key doesn’t exist you will get a nasty exception. For ignoring the exception use the overloaded method:
public void DeleteSubKey(string subkey, bool throwOnMissingSubKey);
In our example this looks like this:
reg = Registry.CurrentUser.OpenSubKey("SOFTWARE", false);
Deleting Values
Deleting a value is similar to deleting a SubKey, it also has two prototypes:
public void DeleteValue(string name);
public void DeleteValue(string name, bool throwOnMissingValue);
Which act the same as in DeleteSubKey.