Feedback

C# - Save Settings to Registry

Veröffentlicht von am 30.10.2016
(0 Bewertungen)
Erlaubt das Lesen und Schreiben von Einstellungen in die Registry in versch. Datentypen.

Wichtig: In der Funktion GetAppSettingsKey() den Namen der Software für "<SoftwareName>" einsetzen...
 using Microsoft.Win32;

public static class AppSettingsManager
    {
        // Einstellungen werden in der Registry gespeichert...

        private static RegistryKey GetAppSettingsKey()
        {
            RegistryKey registryKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\<SoftwareName>", RegistryKeyPermissionCheck.ReadWriteSubTree);
            return registryKey;
        }

        public static void SetValueString(string name, string value)
        {
            try
            {
                GetAppSettingsKey().SetValue(name, value, RegistryValueKind.String);
            }
            catch (Exception ex)
            {
            }
        }

        public static string GetValueString(string name, string defaultV)
        {
            string r1 = null;
            try
            {
                r1 = (string)GetAppSettingsKey().GetValue(name, null);
            }
            catch (Exception ex)
            {
            }

            if (r1 == null)
            {               
				SetValueString(name, defaultV);
                return defaultV;
            }
            return r1;
        }

        public static void SetValueInt32(string name, int value)
        {          
            try
            {
                GetAppSettingsKey().SetValue(name, value, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
            }
        }

        public static int GetValueInt32(string name, int defaultV)
        {
            int r1 = defaultV;
            try
            {
                var k = GetAppSettingsKey();
                r1 = (int)(k.GetValue(name, defaultV));
            }
            catch (Exception ex)
            {
            }

            if (r1 == defaultV)
            {
                SetValueInt32(name, defaultV);
                return defaultV;
            }
            return r1;
        }

        public static void SetValueBool(string name, bool value)
        {
            SetValueInt32(name, value ? 1 : 0);
        }

        public static bool GetValueBool(string name, bool defaultV)
        {
            return (GetValueInt32(name, (defaultV ? 1 : 0))) == 1;
        }
}
Abgelegt unter c#, System, Registry, Settings, Config.

3 Kommentare zum Snippet

Thomas Roskop schrieb am 30.10.2016:
Notiz am Rand: dass bei mir im Catch()-Block nichts ist, ist kein Fehler. Bei mir war da ursprünglich eine Funktion, die den Fehler zu einem Protokollierungs-Helfer weitergeleitet hatte.
Also dort einfach euren eigenen Fehler-Handler einfügen.
Martin Dauskardt schrieb am 30.10.2016:
Tipp: Beim eigenen SW-Design sollte man auf das Sichern in der Registry-DB möglichst verzichten, um sich nicht die Möglichkeit zu verbauen, die Anwendung portabel zu verteilen.
Thomas Roskop schrieb am 30.10.2016:
Das stimmt prinzipiell. Aber bei vielen Anwendungen weiß man entweder, dass diese niemals portabel sein werden oder die Einstellungen sind Computer bezogen – und können somit in der Registry bleiben.
Der Hacken: Viele Entwickler denken so, legen ihre Daten in der Registry ab – aber entfernen diese niemals beim Entfernen der App. So sammelt sich Datenmüll an, der bei jedem Windows-Start mit geladen werden muss und somit der Performance des Systems schadet.
Weshalb Windows auch alle Jahre wieder neu installiert werden will – gängige Registry-Reiniger finden ja auch nur einige Müll-Einträge. Der Rest bleibt …
 

Logge dich ein, um hier zu kommentieren!