SIGN UP MEMBER LOGIN:    
ARTICLE

Working with Windows Registry

Posted by Mahesh Chand Articles | C# Tutorials September 25, 2001
In this small tutorial, I'll show you how to read, write and delete Windows Registry.
Reader Level:

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

Login to add your contents and source code to this article
share this article :
post comment
 

When I right clik on a *.csv file , I get option of my batch file as I have given key and command for Excelcsv in regedit. I want to pass the filename/path as argument to that particularbatch file. How can i do that.

Posted by swati Jan 27, 2008

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

opens the key as read-only and cannot delete its value.

For deleting of value of the subkey, you have to write true for the write access of the subkey while opening it.

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

Posted by ozgur esen Jan 25, 2008

PLS EXPLAIN HOW TO USE REGEDIT IN WINXP

Posted by IBRAHIM IBBU Dec 03, 2007
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor
PREMIUM SPONSORS
  • ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications. Visit DynamicPDF here
    Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites - Click Here!
Team Foundation Server Hosting
Become a Sponsor