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:

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:

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.