Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A C# class that deals with System Registry

0.00/5 (No votes)
31 Mar 2002 1  
This C# class retrieves, creates, deletes Registry values and keys, and even more...

Introduction

Let me introduce to you a class (made in C#, of course) that will help you to perform all necessary System Registry operations, such as retrieving and setting Registry keys and values.

So, what class can my do? My clsRegistry has 10 useful methods that provide you with an easy-to-understand interface to the C# built-in Registry functions. All Registry functions in C# are implemented inside the Microsoft.Win32 namespace, so when you are going to work with the System Registry, do not forget to include the "using Microsoft.Win32;" declaration to your project ... or simply use the clsRegistry class.

clsRegistry's Description

The class methods are:

  • GetStringValue

    Retrieves the specified String value. Returns a System.String object.

  • GetDWORDValue

    Retrieves the specified DWORD value. Returns a System.Int32 object. *

  • GetBinaryValue

    Retrieves the specified Binary value. Returns a System.Byte[] object.

  • SetStringValue

    Sets/creates the specified String value.

  • SetDWORDValue

    Sets/creates the specified DWORD value. *

  • SetBinaryValue

    Sets/creates the specified Binary value.

  • CreateSubKey

    Creates a new subkey or opens an existing subkey.

  • DeleteSubKeyTree

    Deletes a subkey and any child subkeys recursively.

  • DeleteValue

    Deletes the specified value from this (current) key.

  • GetValueType

    Retrieves the type of the specified Registry value.

* Normally, when you are creating a DWORD Registry value, it should be an Unsigned 32-bit integer value (or System.UInt32 or simply uint) with the range from 0 to 4,294,967,295. BUT!!! The Microsotf.Win32.RegistryKey.SetValue() method forces it to be a Signed 32-bit integer (or System.Int32 or simply int) with the range from -2,147,483,648 to 2,147,483,647. If you try to assign a value that is bigger than 2,147,483,647 then the String value is created. So, brothers, PLEASE, BE EXTREMELY CAREFUL here to avoid the unwished consequences!!!

I do not know yet if this is a bug or some kind of a new convention.

How to Include the clsRegistry Class to your Project

Create a New Application using the Console Application template and call it "RegClassTest". Actually, the type of Application doesn't matter in our case; Console Application is just my preference. It might be a Windows Application or whatever - you choose. Now (just for your own comfort) you may copy the clsRegistry.cs file to your project's folder. Then go to the "Project" menu and click on the "Add Existing Item..." or simply press ALT+SHIFT+A to open the Add Item Dialog. Find the clsRegistry.cs file, select it and click "Open". Check out the Solution Explorer window: our file should be added to the project.

clsRegistry: Class Usage

Once you added clsRegistry.cs to your project, double-click it to edit the code. Now replace the following line...

namespace RegistryClass

... with this one:

namespace RegClassTest

Here, instead of "RegClassTest" you will type the namespace' name of your project.

Now save your project and pass to your project's main class and open the code window. In order to start using our clsRegistry class, we must create a new instance of the class. It is done this way:

//don't forget about Microsoft.Win32 namespace
//if you are going to use the C# Registry functions
using Microsoft.Win32;

static void Main(string[] args)
{
    clsRegistry reg = new clsRegistry(); //create new instance of clsRegistry class
    ...
}

IMPORTANT: The functions don't return error codes. For this purpose, the strRegError variable is provided. This variable always contains the error message of the last operation performed, or null if no error occurred. I would advise you to check for errors every time you use clsRegistry's functions. How to invoke a class function and how to check for errors is showed in the example below:

static void Main(string[] args)
{
    clsRegistry reg = new clsRegistry(); //create new instance of clsRegistry class

    /*========= WORKING WITH STRING VALUES =========*/
    Console.WriteLine ("/*========= WORKING WITH STRING VALUES =========*/");
    // Set string value
    Console.WriteLine ("SET");
    reg.SetStringValue (
        Registry.LocalMachine,
        "SOFTWARE\\RegClassTest",
        "myStringValue",
        "Mama, I've just set a string value :-)"
        );
    if (reg.strRegError == null)
        Console.WriteLine ("\"myStringValue\" has been successfully set");
    else
        Console.WriteLine ( "Error: " + reg.strRegError );

    // Get string value
    Console.WriteLine ("GET");
    string strValue = reg.GetStringValue (
        Registry.LocalMachine,
        "SOFTWARE\\RegClassTest",
        "myStringValue"
        );
    if (reg.strRegError == null)
        Console.WriteLine ("myStringValue = \"{0}\"", strValue);
    else
        Console.WriteLine ( "Error: " + reg.strRegError );

    Console.WriteLine ("\npress return to exit");
    Console.ReadLine ();
}

If you insert the code above and Run the project, you'll have the following output:

I've prepared a full sample for you - a sample project that shows how to retrieve and set String, DWORD and Binary values, how to get the value's type, how to create new values and how to delete Registry values and keys.

After executing the full sample, you should get the following output:

Afterword

I have been looking for a class that deals with Registry for a long time. But I found nothing (even on MSDN). So I wrote the clsRegistry. This is something like the first try. I hope you'll help me to expand and improve it. Your suggestions are welcome as always.

- Alexandr Khilov

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here