public static bool IsHiveAvailable(this RegistryEntry entry)
        {
            if (entry.IsUserSpecific())
            {
                using (var key = Registry.Users.OpenSubKey(entry.SID))
                {
                    return(key != null);
                }
            }

            return(true);
        }
        public static bool TryDelete(this RegistryEntry entry)
        {
            var root   = entry.IsUserSpecific() ? Registry.Users : Registry.LocalMachine;
            var subkey = entry.RegistryPath.Substring(entry.RegistryPath.IndexOf('\\') + 1);

            using (var key = root.OpenSubKey(subkey, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl))
            {
                if (key != null)
                {
                    key.DeleteValue(entry.DataItemName);
                    key.Flush();

                    return(true);
                }
            }

            return(false);
        }