Microsoft Win32 C# by API

using System;
using Microsoft.Win32;
class MainClass
{
    public static void SearchSubKeys(RegistryKey root, String searchKey)
    {
        foreach (string keyname in root.GetSubKeyNames())
        {
            try
            {
                using (RegistryKey key = root.OpenSubKey(keyname))
                {
                    if (keyname == searchKey) {
                        foreach (string valuename in key.GetValueNames())
                        {
                            if (key.GetValue(valuename) is String)
                            {
                                Console.WriteLine("  Value : {0} = {1}",
                                    valuename, key.GetValue(valuename));
                            }
                        }
                    }
                    SearchSubKeys(key, searchKey);
                }
            }
            catch (System.Security.SecurityException)
            {
            }
        }
    }
    public static void Main(String[] args)
    {
        using (RegistryKey root = Registry.CurrentUser)
        {
            string myKey="Java";
            SearchSubKeys(root, myKey);
        }
    }
}