2 out of 5 rated this helpful - Rate this topic

RegistryKey Class

Represents a key-level node in the Windows registry. This class is a registry encapsulation.

System.Object
  System.MarshalByRefObject
    Microsoft.Win32.RegistryKey

Namespace:  Microsoft.Win32
Assembly:  mscorlib (in mscorlib.dll)
[ComVisibleAttribute(true)]
public sealed class RegistryKey : MarshalByRefObject, 
	IDisposable

The RegistryKey type exposes the following members.

  Name Description
Public property Handle Gets a SafeRegistryHandle object that represents the registry key that the current RegistryKey object encapsulates.
Public property Name Retrieves the name of the key.
Public property SubKeyCount Retrieves the count of subkeys of the current key.
Public property ValueCount Retrieves the count of values in the key.
Public property View Gets the view that was used to create the registry key.
Top
  Name Description
Public method Close Closes the key and flushes it to disk if its contents have been modified.
Public method CreateObjRef Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object. (Inherited from MarshalByRefObject.)
Public method CreateSubKey(String) Creates a new subkey or opens an existing subkey for write access.
Public method CreateSubKey(String, RegistryKeyPermissionCheck) Creates a new subkey or opens an existing subkey for write access, using the specified permission check option.
Public method CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions) Creates a subkey or opens a subkey for write access, using the specified permission check and registry options.
Public method CreateSubKey(String, RegistryKeyPermissionCheck, RegistrySecurity) Creates a new subkey or opens an existing subkey for write access, using the specified permission check option and registry security.
Public method CreateSubKey(String, RegistryKeyPermissionCheck, RegistryOptions, RegistrySecurity) Creates a subkey or opens a subkey for write access, using the specified permission check option, registry option, and registry security.
Public method DeleteSubKey(String) Deletes the specified subkey.
Public method DeleteSubKey(String, Boolean) Deletes the specified subkey, and specifies whether an exception is raised if the subkey is not found.
Public method DeleteSubKeyTree(String) Deletes a subkey and any child subkeys recursively.
Public method DeleteSubKeyTree(String, Boolean) Deletes the specified subkey and any child subkeys recursively, and specifies whether an exception is raised if the subkey is not found.
Public method DeleteValue(String) Deletes the specified value from this key.
Public method DeleteValue(String, Boolean) Deletes the specified value from this key, and specifies whether an exception is raised if the value is not found.
Public method Dispose Releases all resources used by the current instance of the RegistryKey class.
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method Flush Writes all the attributes of the specified open registry key into the registry.
Public method Static member FromHandle(SafeRegistryHandle) Creates a registry key from a specified handle.
Public method Static member FromHandle(SafeRegistryHandle, RegistryView) Creates a registry key from a specified handle and registry view setting.
Public method GetAccessControl() Returns the access control security for the current registry key.
Public method GetAccessControl(AccessControlSections) Returns the specified sections of the access control security for the current registry key.
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetLifetimeService Retrieves the current lifetime service object that controls the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Public method GetSubKeyNames Retrieves an array of strings that contains all the subkey names.
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Public method GetValue(String) Retrieves the value associated with the specified name. Returns null if the name/value pair does not exist in the registry.
Public method GetValue(String, Object) Retrieves the value associated with the specified name. If the name is not found, returns the default value that you provide.
Public method GetValue(String, Object, RegistryValueOptions) Retrieves the value associated with the specified name and retrieval options. If the name is not found, returns the default value that you provide.
Public method GetValueKind Retrieves the registry data type of the value associated with the specified name.
Public method GetValueNames Retrieves an array of strings that contains all the value names associated with this key.
Public method InitializeLifetimeService Obtains a lifetime service object to control the lifetime policy for this instance. (Inherited from MarshalByRefObject.)
Protected method MemberwiseClone() Creates a shallow copy of the current Object. (Inherited from Object.)
Protected method MemberwiseClone(Boolean) Creates a shallow copy of the current MarshalByRefObject object. (Inherited from MarshalByRefObject.)
Public method Static member OpenBaseKey Opens a new RegistryKey that represents the requested key on the local machine with the specified view.
Public method Static member OpenRemoteBaseKey(RegistryHive, String) Opens a new RegistryKey that represents the requested key on a remote machine.
Public method Static member OpenRemoteBaseKey(RegistryHive, String, RegistryView) Opens a new registry key that represents the requested key on a remote machine with the specified view.
Public method OpenSubKey(String) Retrieves a subkey as read-only.
Public method OpenSubKey(String, RegistryKeyPermissionCheck) Retrieves the specified subkey for read or read/write access.
Public method OpenSubKey(String, Boolean) Retrieves a specified subkey, and specifies whether write access is to be applied to the key.
Public method OpenSubKey(String, RegistryKeyPermissionCheck, RegistryRights) Retrieves the specified subkey for read or read/write access, requesting the specified access rights.
Public method SetAccessControl Applies Windows access control security to an existing registry key.
Public method SetValue(String, Object) Sets the specified name/value pair.
Public method SetValue(String, Object, RegistryValueKind) Sets the value of a name/value pair in the registry key, using the specified registry data type.
Public method ToString Retrieves a string representation of this key. (Overrides Object.ToString().)
Top

To get an instance of RegistryKey, use the one of the static members of the Registry class.

The registry acts as a central repository of information for the operating system and the applications on a computer. The registry is organized in a hierarchical format, based on a logical ordering of the elements stored within it (please see Registry for the base-level items in this hierarchy). When storing information in the registry, select the appropriate location based on the type of information being stored. Be sure to avoid destroying information created by other applications, because this can cause those applications to exhibit unexpected behavior, and can also have an adverse effect upon your own application.

Registry keys are the base unit of organization in the registry, and can be compared to folders in Windows Explorer. A particular key can have subkeys, just as a folder can have subfolders. Each key can be deleted, as long as the user has the appropriate permissions to do so, and the key is not a base key or at the level directly under the base keys. Each key can also have multiple values associated with it (a value can be compared to a file), which are used to store the information — for example, information about an application installed on the computer. Each value holds one particular piece of information, which can be retrieved or updated when required. For instance, you can create a RegistryKey for your company, under the key HKEY_LOCAL_MACHINE\Software, and then a subkey for each application that your company creates. Each subkey holds the information specific to that application, such as color settings, screen location and size, or recognized file extensions.

Note that information stored in the registry is available to other applications and users, and therefore should not be used to store security data or critical application information.

Caution note Caution

Do not expose RegistryKey objects in such a way that a malicious program could create thousands of meaningless subkeys or key/value pairs. For example, do not allow callers to enter arbitrary keys or values.

Starting in the .NET Framework version 4, the length of a registry key is no longer limited to 255 characters.

The following code example shows how to create a subkey under HKEY_CURRENT_USER, manipulate its contents, and then delete the subkey.


using System;
using System.Security.Permissions;
using Microsoft.Win32;

class RegKey
{
    static void Main()
    {
        // Create a subkey named Test9999 under HKEY_CURRENT_USER.
        RegistryKey test9999 = 
            Registry.CurrentUser.CreateSubKey("Test9999");
        // Create two subkeys under HKEY_CURRENT_USER\Test9999. The
        // keys are disposed when execution exits the using statement.
        using(RegistryKey 
            testName = test9999.CreateSubKey("TestName"),
            testSettings = test9999.CreateSubKey("TestSettings"))
        {
            // Create data for the TestSettings subkey.
            testSettings.SetValue("Language", "French");
            testSettings.SetValue("Level", "Intermediate");
            testSettings.SetValue("ID", 123);
        }

        // Print the information from the Test9999 subkey.
        Console.WriteLine("There are {0} subkeys under {1}.", 
            test9999.SubKeyCount.ToString(), test9999.Name);
        foreach(string subKeyName in test9999.GetSubKeyNames())
        {
            using(RegistryKey 
                tempKey = test9999.OpenSubKey(subKeyName))
            {
                Console.WriteLine("\nThere are {0} values for {1}.", 
                    tempKey.ValueCount.ToString(), tempKey.Name);
                foreach(string valueName in tempKey.GetValueNames())
                {
                    Console.WriteLine("{0,-8}: {1}", valueName, 
                        tempKey.GetValue(valueName).ToString());
                }
            }
        }

        using(RegistryKey 
            testSettings = test9999.OpenSubKey("TestSettings", true))
        {
            // Delete the ID value.
            testSettings.DeleteValue("id");

            // Verify the deletion.
            Console.WriteLine((string)testSettings.GetValue(
                "id", "ID not found."));
        }

        // Delete or close the new subkey.
        Console.Write("\nDelete newly created registry key? (Y/N) ");
        if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
        {
            Registry.CurrentUser.DeleteSubKeyTree("Test9999");
            Console.WriteLine("\nRegistry key {0} deleted.", 
                test9999.Name);
        }
        else
        {
            Console.WriteLine("\nRegistry key {0} closed.", 
                test9999.ToString());
            test9999.Close();
        }
    }
}


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ