Click here to Skip to main content
Click here to Skip to main content

Read, write and delete from registry with C#

By , 17 Dec 2002
 

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

About the Author

Francesco Natali
Web Developer
Italy Italy
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralRe: LocalMachine does not exist in namespacememberMember 825906622 Sep '11 - 5:15 
GeneralRe: LocalMachine does not exist in namespacemembermasteryoda2130 Nov '11 - 7:52 
GeneralThank youmemberpablogrs31 Jan '11 - 5:14 
QuestionAccess to the registry key is deniedmemberTintinBD19 Oct '10 - 2:49 
AnswerRe: Access to the registry key is deniedmemberMember 865196827 Jun '12 - 1:04 
GeneralMy vote of 5memberTintinBD19 Oct '10 - 2:45 
QuestionString only???memberJacob1737418241 Sep '10 - 10:59 
I That's annoying, because I really wanted to use DWORDS with this.....and spent like 3 hours trying to get it to read a DWORD
Jacob

AnswerRe: String only???memberyuan rahman5 Sep '10 - 0:55 
GeneralStrings Onlymemberalan934 Mar '10 - 7:03 
GeneralProblem for creating Registry in vista operating systemmembernehasingh0981218 Feb '10 - 20:10 
GeneralVery good codememberNarendraSinghJTV22 Jan '10 - 17:57 
GeneralOpenSubKey() with write accessmemberrcgreen29 Oct '09 - 12:33 
QuestionAccessing the Registry Remotly?membermoh.kanaan6 Jul '09 - 14:05 
Questionhi:problemmemberArsineh Boodaghian1 May '09 - 0:37 
GeneralThank you natalimembermr.mohsen13 Mar '09 - 1:58 
QuestionUnauthorizedAccessException CommonAppDataRegestrymembermarcovdlinden4 Feb '09 - 3:02 
Generalopening a keymembertjstickel28 Jul '08 - 12:35 
GeneralRe: opening a keymemberlexoman15 Sep '08 - 4:05 
GeneralAssign administrative rightsmemberprajakta121411 Jun '08 - 1:46 
GeneralWin64membertridy8 May '08 - 1:06 
GeneralAccessing the registry as a C# console applicationmemberPaul / Singapore13 Oct '07 - 4:11 
GeneralRe: Accessing the registry as a C# console applicationmemberpablogrs31 Jan '11 - 5:20 
GeneralCannot rate this article highly enoughmemberrichinsea4 Sep '07 - 7:33 
QuestionDelete file from registry?memberlildiapaz3 Aug '07 - 5:42 
GeneralThank YoumemberJapan Shah18 Jul '07 - 2:02 

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

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