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:
using Microsoft.Win32;
static void Main(string[] args)
{
clsRegistry reg = new clsRegistry();
...
}
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();
Console.WriteLine ("/*========= WORKING WITH STRING VALUES =========*/");
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 );
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