Development Class C#

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
namespace Regedit
{
    class RegistryUtils
    {
        public static RegistryKey OpenKeyFromPath(string keyPath, bool writableKey)
        {
            if (string.IsNullOrEmpty(keyPath))
                return null;
            string[] pathElements = keyPath.Split(new[] { '\\' });
            // Getting the first element
            string rootKeyName = pathElements[0];
            string subPath = keyPath.IndexOf('\\') == -1 ? keyPath : keyPath.Substring(keyPath.IndexOf('\\'));
            try
            {
                if (pathElements.Length == 1) // Root nodes have been selected.
                {
                    if (rootKeyName == Registry.ClassesRoot.Name)
                        return Registry.ClassesRoot;
                    else if (rootKeyName == Registry.CurrentUser.Name)
                        return Registry.CurrentUser;
                    else if (rootKeyName == Registry.LocalMachine.Name)
                        return Registry.LocalMachine;
                    else if (rootKeyName == Registry.Users.Name)
                        return Registry.Users;
                }
                else
                {
                    if (rootKeyName == Registry.ClassesRoot.Name)
                        return Registry.ClassesRoot.OpenSubKey(subPath, writableKey);
                    else if (rootKeyName == Registry.CurrentUser.Name)
                        return Registry.CurrentUser.OpenSubKey(subPath, writableKey);
                    else if (rootKeyName == Registry.LocalMachine.Name)
                        return Registry.LocalMachine.OpenSubKey(subPath, writableKey);
                    else if (rootKeyName == Registry.Users.Name)
                        return Registry.Users.OpenSubKey(subPath, writableKey);
                }
                    return null;
            }
            catch
            {
                return null;
            }
        }
        /// 
        /// Renames a subkey of the passed in registry key since 
        /// the Framework totally forgot to include such a handy feature.
        /// 

        /// The RegistryKey that contains the subkey 
        /// you want to rename (must be writeable)
        /// The name of the subkey that you want to rename
        /// 
        /// The new name of the RegistryKey
        /// True if succeeds
        public static bool RenameSubKey(RegistryKey parentKey,
            string subKeyName, string newSubKeyName)
        {
            CopyKey(parentKey, subKeyName, newSubKeyName);
            parentKey.DeleteSubKeyTree(subKeyName);
            parentKey.Flush();
            return true;
        }
        /// 
        /// Copy a registry key.  The parentKey must be writeable.
        /// 

        /// 
        /// 
        /// 
        /// 
        public static bool CopyKey(RegistryKey parentKey,
            string keyNameToCopy, string newKeyName)
        {
            //Create new key
            RegistryKey destinationKey = parentKey.CreateSubKey(newKeyName);
            //Open the sourceKey we are copying from
            RegistryKey sourceKey = parentKey.OpenSubKey(keyNameToCopy, true);
            RecurseCopyKey(sourceKey, destinationKey);
            return true;
        }
        private static void RecurseCopyKey(RegistryKey sourceKey, RegistryKey destinationKey)
        {
            //copy all the values
            foreach (string valueName in sourceKey.GetValueNames())
            {
                object objValue = sourceKey.GetValue(valueName);
                RegistryValueKind valKind = sourceKey.GetValueKind(valueName);
                destinationKey.SetValue(valueName, objValue, valKind);
            }
            //For Each subKey 
            //Create a new subKey in destinationKey 
            //Call myself 
            foreach (string sourceSubKeyName in sourceKey.GetSubKeyNames())
            {
                RegistryKey sourceSubKey = sourceKey.OpenSubKey(sourceSubKeyName, true);
                RegistryKey destSubKey = destinationKey.CreateSubKey(sourceSubKeyName);
                RecurseCopyKey(sourceSubKey, destSubKey);
            }
            // Close it when finished so it can be deleted later in the final step
            sourceKey.Close();
            destinationKey.Close();
        }
    }
}