internal static SerializerDescriptor CreateFromRegistry(RegistryKey plugIns, string keyName)
        {
            SecurityHelper.DemandPlugInSerializerPermissions();
            SerializerDescriptor serializerDescriptor = new SerializerDescriptor();

            try
            {
                RegistryKey registryKey = plugIns.OpenSubKey(keyName);
                serializerDescriptor._displayName          = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "displayName");
                serializerDescriptor._manufacturerName     = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "manufacturerName");
                serializerDescriptor._manufacturerWebsite  = new Uri(SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "manufacturerWebsite"));
                serializerDescriptor._defaultFileExtension = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "defaultFileExtension");
                serializerDescriptor._assemblyName         = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "assemblyName");
                serializerDescriptor._assemblyPath         = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "assemblyPath");
                serializerDescriptor._factoryInterfaceName = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "factoryInterfaceName");
                serializerDescriptor._assemblyVersion      = new Version(SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "assemblyVersion"));
                serializerDescriptor._winFXVersion         = new Version(SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "winFXVersion"));
                string nonEmptyRegistryString = SerializerDescriptor.GetNonEmptyRegistryString(registryKey, "uiLanguage");
                registryKey.Close();
                if (!nonEmptyRegistryString.Equals(CultureInfo.CurrentUICulture.Name))
                {
                    ISerializerFactory serializerFactory = serializerDescriptor.CreateSerializerFactory();
                    serializerDescriptor._displayName          = serializerFactory.DisplayName;
                    serializerDescriptor._manufacturerName     = serializerFactory.ManufacturerName;
                    serializerDescriptor._manufacturerWebsite  = serializerFactory.ManufacturerWebsite;
                    serializerDescriptor._defaultFileExtension = serializerFactory.DefaultFileExtension;
                    registryKey = plugIns.CreateSubKey(keyName);
                    serializerDescriptor.WriteToRegistryKey(registryKey);
                    registryKey.Close();
                }
            }
            catch (KeyNotFoundException)
            {
                serializerDescriptor = null;
            }
            if (serializerDescriptor != null)
            {
                Assembly assembly = Assembly.ReflectionOnlyLoadFrom(serializerDescriptor._assemblyPath);
                if (typeof(Button).Assembly.GetName().Version == serializerDescriptor._winFXVersion && assembly != null && assembly.GetName().Version == serializerDescriptor._assemblyVersion)
                {
                    serializerDescriptor._isLoadable = true;
                }
            }
            return(serializerDescriptor);
        }