Sprache: C#
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;
}
}
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;
}
}
Alte URL:
/snippet/save-settings-to-registry/15152
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.
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.
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 …