Click here to Skip to main content
11,412,526 members (74,429 online)
Click here to Skip to main content

Read, write and delete from registry with C#

, 17 Dec 2002
Rate this:
Please Sign up or sign in to vote.
An useful simple class to read, write, delete values from registry with C#.

Introduction

I've done a little update, now this class provides six functions:

  • Read to read a registry key.
  • Write to write into a registry key.
  • DeleteKey to delete a registry key.
  • DeleteSubKeyTree to delete a sub key and any child.
  • SubKeyCount to retrieve the count of subkeys at the current key.
  • ValueCount to retrieve the count of values in the key.

and three properties:

  • ShowError to show or hide error messages (default = false).
  • SubKey to set the subkey value (default = "SOFTWARE\\" + Application.ProductName).
  • BaseRegistryKey to set the base registry key value (default = Registry.LocalMachine).

Source code

Importing other namespaces...

using System;
// it's required for reading/writing into the registry:
using Microsoft.Win32;      
// and for the MessageBox function:
using System.Windows.Forms;

Read function

  • input: the key name (string)
  • output: value of the key (string)
public string Read(string KeyName)
{
    // Opening the registry key
    RegistryKey rk = baseRegistryKey ;
    // Open a subKey as read-only
    RegistryKey sk1 = rk.OpenSubKey(subKey);
    // If the RegistrySubKey doesn't exist -> (null)
    if ( sk1 == null )
    {
        return null;
    }
    else
    {
        try 
        {
            // If the RegistryKey exists I get its value
            // or null is returned.
            return (string)sk1.GetValue(KeyName.ToUpper());
        }
        catch (Exception e)
        {
            // AAAAAAAAAAARGH, an error!
            ShowErrorMessage(e, "Reading registry " + KeyName.ToUpper());
            return null;
        }
    }
}

Write function

  • input: the key name (string) and its value (object)
  • output: true if OK or false if error
public bool Write(string KeyName, object Value)
{
    try
    {
        // Setting
        RegistryKey rk = baseRegistryKey ;
        // I have to use CreateSubKey 
        // (create or open it if already exits), 
        // 'cause OpenSubKey open a subKey as read-only
        RegistryKey sk1 = rk.CreateSubKey(subKey);
        // Save the value
        sk1.SetValue(KeyName.ToUpper(), Value);

        return true;
    }
    catch (Exception e)
    {
        // AAAAAAAAAAARGH, an error!
        ShowErrorMessage(e, "Writing registry " + KeyName.ToUpper());
        return false;
    }
}

DeleteKey function

  • input: the key name (string)
  • output: true if OK or false if error
public bool DeleteKey(string KeyName)
{
    try
    {
        // Setting
        RegistryKey rk = baseRegistryKey ;
        RegistryKey sk1 = rk.CreateSubKey(subKey);
        // If the RegistrySubKey doesn't exists -> (true)
        if ( sk1 == null )
            return true;
        else
            sk1.DeleteValue(KeyName);

        return true;
    }
    catch (Exception e)
    {
        // AAAAAAAAAAARGH, an error!
        ShowErrorMessage(e, "Deleting SubKey " + subKey);
        return false;
    }
}

DeleteSubKeyTree function

  • input: void
  • output: true if OK or false if error
public bool DeleteSubKeyTree()
{
    try
    {
        // Setting
        RegistryKey rk = baseRegistryKey ;
        RegistryKey sk1 = rk.OpenSubKey(subKey);
        // If the RegistryKey exists, I delete it
        if ( sk1 != null )
            rk.DeleteSubKeyTree(subKey);

        return true;
    }
    catch (Exception e)
    {
        // AAAAAAAAAAARGH, an error!
        ShowErrorMessage(e, "Deleting SubKey " + subKey);
        return false;
    }
}

SubKeyCount function

  • input: void
  • output: number of subkeys at the current key
public int SubKeyCount()
{
    try
    {
        // Setting
        RegistryKey rk = baseRegistryKey ;
        RegistryKey sk1 = rk.OpenSubKey(subKey);
        // If the RegistryKey exists...
        if ( sk1 != null )
            return sk1.SubKeyCount;
        else
            return 0; 
    }
    catch (Exception e)
    {
        // AAAAAAAAAAARGH, an error!
        ShowErrorMessage(e, "Retriving subkeys of " + subKey);
        return 0;
    }
}

ValueCount function

  • input: void
  • output: number of values in the key
public int ValueCount()
{
    try
    {
        // Setting
        RegistryKey rk = baseRegistryKey ;
        RegistryKey sk1 = rk.OpenSubKey(subKey);
        // If the RegistryKey exists...
        if ( sk1 != null )
            return sk1.ValueCount;
        else
            return 0; 
    }
    catch (Exception e)
    {
        // AAAAAAAAAAARGH, an error!
        ShowErrorMessage(e, "Retriving keys of " + subKey);
        return 0;
    }
}

ShowErrorMessage function

This is a private function to show the error message if the property showError = true.

private void ShowErrorMessage(Exception e, string Title)
{
    if (showError == true)
        MessageBox.Show(e.Message,
                Title
                ,MessageBoxButtons.OK
                ,MessageBoxIcon.Error);
}

Using the code

First of all, you have to import its namespace:

using Utility.ModifyRegistry;

and to instantiate your class:

ModifyRegistry myRegistry = new ModifyRegistry();

The three properties have already their default values. However, you can modify them:

property default value example
ShowError false myRegistry.ShowError = true;
BaseRegistryKey Registry.LocalMachine myRegistry.BaseRegistryKey = Registry.CurrentUser;
SubKey "SOFTWARE\\" + Application.ProductName myRegistry.SubKey = "SOFTWARE\\MYPROGRAM\\MYSUBKEY";

OK, now you can read, write, and delete from your registry.

To read:

myRegistry.Read("MY_KEY");

Note: if MY_KEY doesn't exist, the Read function will return null.

To write:

myRegistry.Write("MY_KEY", "MY_VALUE");

Note: if the SubKey doesn't exist, it will be automatically created.

To delete a single key:

myRegistry.DeleteKey("MY_KEY");

Note: also if the MY_KEY doesn't exist, this function will return TRUE.

To delete the subkey tree:

myRegistry.DeleteSubKeyTree();

Note: this code will delete the SubKey and all its children.

To retrieve the count of subkeys at the current key:

myRegistry.SubKeyCount();

To retrieve the count of values in the key:

myRegistry.ValueCount();

Example

The following code is an example from my in progress RTF file editor program. This code retrieves the "Recent files" list from registry:

[...]
ModifyRegistry myRegistry = new ModifyRegistry();
myRegistry.SubKey = "SOFTWARE\\RTF_SHARP_EDIT\\RECENTFILES";
myRegistry.ShowError = true;
int numberValues = myRegistry.ValueCount();

for (int i = 0; i < numberValues; i++)
{
    arrayRecentFiles[i] = myRegistry.Read(i.ToString());
    [...]

and this code writes the "Recent files" list into registry:

ModifyRegistry myRegistry = new ModifyRegistry();
myRegistry.SubKey = "SOFTWARE\\RTF_SHARP_EDIT\\RECENTFILES";
myRegistry.ShowError = true;
myRegistry.DeleteSubKeyTree();
for (int i = 0; i < 8 ; i++)
{
    if (arrayRecentFiles[i] == null)
        break;
    myRegistry.Write(i.ToString(), arrayRecentFiles[i]);
}

Conclusion

The .NET framework has a lot of functions to read and modify the registry, my class is only a start point. I hope this helps!

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

Share

About the Author

Francesco Natali
Web Developer
Italy Italy
No Biography provided

Comments and Discussions

 
GeneralGood article Pin
joyichantg at 13-Jul-11 22:39
memberjoyichantg13-Jul-11 22:39 
GeneralLocalMachine does not exist in namespace Pin
masteryoda21 at 9-May-11 12:27
membermasteryoda219-May-11 12:27 
GeneralRe: LocalMachine does not exist in namespace Pin
Member 8259066 at 22-Sep-11 6:15
memberMember 825906622-Sep-11 6:15 
GeneralRe: LocalMachine does not exist in namespace Pin
masteryoda21 at 30-Nov-11 8:52
membermasteryoda2130-Nov-11 8:52 
GeneralThank you Pin
pablogrs at 31-Jan-11 6:14
memberpablogrs31-Jan-11 6:14 
QuestionAccess to the registry key is denied Pin
TintinBD at 19-Oct-10 3:49
memberTintinBD19-Oct-10 3:49 
AnswerRe: Access to the registry key is denied Pin
Member 8651968 at 27-Jun-12 2:04
memberMember 865196827-Jun-12 2:04 
GeneralMy vote of 5 Pin
TintinBD at 19-Oct-10 3:45
memberTintinBD19-Oct-10 3:45 
It is really simple but effective coding
QuestionString only??? Pin
Jacob173741824 at 1-Sep-10 11:59
memberJacob1737418241-Sep-10 11:59 
AnswerRe: String only??? Pin
yuan rahman at 5-Sep-10 1:55
memberyuan rahman5-Sep-10 1:55 
GeneralStrings Only Pin
alan93 at 4-Mar-10 8:03
memberalan934-Mar-10 8:03 
GeneralProblem for creating Registry in vista operating system Pin
nehasingh09812 at 18-Feb-10 21:10
membernehasingh0981218-Feb-10 21:10 
GeneralVery good code Pin
NarendraSinghJTV at 22-Jan-10 18:57
memberNarendraSinghJTV22-Jan-10 18:57 
GeneralOpenSubKey() with write access Pin
rcgreen at 29-Oct-09 13:33
memberrcgreen29-Oct-09 13:33 
QuestionAccessing the Registry Remotly? Pin
moh.kanaan at 6-Jul-09 15:05
membermoh.kanaan6-Jul-09 15:05 
Questionhi:problem Pin
Arsineh Boodaghian at 1-May-09 1:37
memberArsineh Boodaghian1-May-09 1:37 
GeneralThank you natali Pin
mr.mohsen at 13-Mar-09 2:58
membermr.mohsen13-Mar-09 2:58 
QuestionUnauthorizedAccessException CommonAppDataRegestry Pin
marcovdlinden at 4-Feb-09 4:02
membermarcovdlinden4-Feb-09 4:02 
Generalopening a key Pin
tjstickel at 28-Jul-08 13:35
membertjstickel28-Jul-08 13:35 
GeneralRe: opening a key Pin
lexoman1 at 5-Sep-08 5:05
memberlexoman15-Sep-08 5:05 
GeneralAssign administrative rights Pin
prajakta1214 at 11-Jun-08 2:46
memberprajakta121411-Jun-08 2:46 
GeneralWin64 Pin
tridy at 8-May-08 2:06
membertridy8-May-08 2:06 
GeneralAccessing the registry as a C# console application Pin
Paul / Singapore at 13-Oct-07 5:11
memberPaul / Singapore13-Oct-07 5:11 
GeneralRe: Accessing the registry as a C# console application Pin
pablogrs at 31-Jan-11 6:20
memberpablogrs31-Jan-11 6:20 
GeneralCannot rate this article highly enough Pin
richinsea at 4-Sep-07 8:33
memberrichinsea4-Sep-07 8:33 

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

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

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150427.1 | Last Updated 18 Dec 2002
Article Copyright 2002 by Francesco Natali
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid