Working with Windows Registry

Windows Registry is a central database for application configuration settings and other information required by the applications. Actually there is nothing else you can do with Windows Registry besides reading its data and write data to it ;). In this small tutorial, I'll show you how to read, write and delete Windows Registry.

If you've never open Windows registry, you can see it by running regedit from command line. See figure 1.

Figure 1. Running Regedit from command line

Ok button opens the Registry Editor. As you can see from Figure 2, registry is a hierarchical data storage for various settings. It has main 5 keys under My Computer.

Figure 2. Registry Editor.

.NET Framework Library provides two classes - Registry and RegistryKey to work with the registry. These classes are defined in Microsoft.Win32 namespace. So before using these classes, you need to add reference to this namespace.

The Registry Class

The Registry class contains members to provides access to registry keys. We can define registry keys in the following order.

  • CurrentUser - Stores information about user preferences.
  • LocalMachine - Stores configuration information for the local machine.
  • ClassesRoot - Stores information about types (and classes) and their properties.
  • Users - Stores information about the default user configuration.
  • PerformanceData - Stores performance information for software components.
  • CurrentConfig - Stores non-user-specific hardware information.
  • DynData - Stores dynamic data.

The registry class has a field corresponding to each of these key types. The Registry class members are described in the following table.

ClassesRoot Returns a RegistryKey type which provides access to HKEY_CLASSES_ROOT key.
CurrentConfig Returns a RegistryKey type which provides access to HKEY_CURRENT_CONFIG key.
CurrentUser Returns a RegistryKey type which provides access to HKEY_CURRENT_USER key.
DynData Returns a RegistryKey type which provides access to HKEY_DYN_DATA key.
LocalMachine Returns a RegistryKey type which provides access to HKEY_LOCAL_MACHINE key.
PerformanceData Returns a RegistryKey type which provides access to HKEY_PERFORMANCE_DATA key.
Users Returns a RegistryKey type which provides access to HKEY_USERS key.

For example, if you want to access HKEY_LOCAL_MACHINE key, you need to call Registry.LocalMachine member which returns a RegistryKey type.

RegistryKey pRegKey = Registry.LocalMachine;

The RegistryKey Class

The RegistryKey class contains members to add, remove, replace, and read registry data. Some of its common methods and properties are defined in the following table.

Properties Description
Name Represents the name of the key.
SubKeyCount Represents the count of subkeys at the base level, for the current key.
ValueCount Represents the count of values in the key.

Methods

Method Description
Close Closes the key.
CreateSubKey Creates a new subkey if not exists, otherwise opens an existing subkey.
DeleteSubKey Deletes the specified subkey.
DeleteSubKeyTree Deletes a subkey and any children.
DeleteValue Deletes the specified value from a key.
GetSubKeyNames Returns an array of strings that contains all the subkey names.
GetValue Returns the specified value.
GetValueNames Retrieves an array of strings that contains all the value names associated with this key.
OpenSubKey Opens a subkey.
SetValue Sets the specified value.

Adding a Key and Value to Registry

Ok, in our sample example, let's see how to use these methods to add, remove and update keys and their values.

We'll add a key MCBInc\with data NET Developer. After addition, Registry would look like figure 3.

Figure 3: Registry after addition.

You use CreateSubKey to add a new key to the Registry and call SetValue method to write a value and key. The following code does this for us.

// Create a new key under HKEY_LOCAL_MACHINE\Software as MCBInc
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);
// Add one more sub key
RegistryKey newkey = key.CreateSubKey("MCBInc");
// Set value of sub key
newkey.SetValue("MCBInc", "NET Developer");

Retrieving Data from the Registry

Ok, in our sample example, let's see how to use these methods to add, remove and update keys and their values.

GetValue method returns the value of a subkey in the form of Object. In the following example, I read value of CenteralProcessor\0 subkey and write to the console.

// Retrieve data from other part of the registry
// find out your processor
RegistryKey pRegKey = Registry.LocalMachine;
pRegKey = pRegKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
Object val = pRegKey.GetValue("VendorIdentifier");
Console.WriteLine("The central processor of this machine is:"+ val);

Deleting Data

The DeleteValue method can be used to delete value of a subkey. DeleteSubKey deletes the defined subkey. DeleteSubKey delete the subkey with its data.

// Delete the key value
RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software\\");
delKey.DeleteValue("MCBInc");
// Delete the key value
RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software", true);
delKey.DeleteSubKey("MCBInc");

Source Code

Here is the entire source code.

using System;
using Microsoft.Win32;
namespace WinRegInVCNET
{
class Class1
{
static void Main(string[] args)
{
// Create a new key under HKEY_LOCAL_MACHINE\Software as MCBInc
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);
// Add one more sub key
RegistryKey newkey = key.CreateSubKey("MCBInc");
// Set value of sub key
newkey.SetValue("MCBInc", "NET Developer");
// Retrieve data from other part of the registry
// find out your processor
RegistryKey pRegKey = Registry.LocalMachine;
pRegKey = pRegKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
Object val = pRegKey.GetValue("VendorIdentifier");
Console.WriteLine("The central processor of this machine is:"+ val);
// Delete the key value
RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software", true);
delKey.DeleteSubKey("MCBInc");
}
}
}


Similar Articles
Mindcracker
Founded in 2003, Mindcracker is the authority in custom software development and innovation. We put best practices into action. We deliver solutions based on consumer and industry analysis.