Click here to Skip to main content
15,867,568 members
Articles / Programming Languages / C#
Article

A C# class that deals with System Registry

Rate me:
Please Sign up or sign in to vote.
3.74/5 (23 votes)
31 Mar 2002CPOL4 min read 106K   1.6K   36   12
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.

Image 1

clsRegistry: Class Usage

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

C#
namespace RegistryClass

... with this one:

C#
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:

C#
//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:

C#
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:

Image 2

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:

Image 3

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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Canada Canada
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
Member 85284094-Sep-12 5:23
Member 85284094-Sep-12 5:23 
Generalbug in Microsoft.Win32.RegistryValueKind.DWord Pin
benneh2-Mar-06 13:53
benneh2-Mar-06 13:53 
Generalthanks mate! Pin
Moshiko Feldman9-Aug-05 2:55
Moshiko Feldman9-Aug-05 2:55 
GeneralAlexandr Khilov:- New code version Pin
riscy21-Apr-05 20:44
riscy21-Apr-05 20:44 
GeneralDoesn't work on Form.. Pin
xpmule19-Feb-05 17:10
xpmule19-Feb-05 17:10 
GeneralRe: Doesn't work on Form.. Pin
psymon254-Nov-06 6:41
psymon254-Nov-06 6:41 
QuestionWhy bother? Pin
3-Apr-02 13:36
suss3-Apr-02 13:36 
GeneralCode tips Pin
Andy Smith30-Mar-02 14:26
Andy Smith30-Mar-02 14:26 
GeneralRe: Code tips Pin
Alexandr_K1-Apr-02 3:09
Alexandr_K1-Apr-02 3:09 
GeneralRe: Code tips Pin
Andy Smith1-Apr-02 5:24
Andy Smith1-Apr-02 5:24 
GeneralRe: Code tips Pin
Alexandr_K1-Apr-02 11:36
Alexandr_K1-Apr-02 11:36 
GeneralRe: Code tips Pin
riscy21-Apr-05 20:34
riscy21-Apr-05 20:34 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.