Laden...

UserSettings für alle Systemnutzer hinterlegen (Default User)

Erstellt von inflames2k vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.283 Views
inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 5 Jahren
UserSettings für alle Systemnutzer hinterlegen (Default User)

Hallo,

wir entwickeln gerade eine Anwendung für einen neuen Kunden. - Nun sind wir auf das Problem gestoßen, dass wir Einstellungen speichern müssen. - Dafür würde ich gerne das Konfigurationsmodell nutzen.

Nun unterscheidet die Settings-Klasse ja zwischen AppSettings und UserSettings. - Ist es möglich UserSettings unter C:\Users\Default\AppData\Local ablegen zu lassen statt unter dem spezifischen Benutzer und von dort aus auch wieder zu laden?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

656 Beiträge seit 2008
vor 5 Jahren

Wenn du nur Standardwerte vorgeben möchtest, kannst du diese einfach als AppSetting machen (wenn sie nicht änderbar sein müssen) oder beim UserSetting direkt eintragen (damit ist es einfach ein Standardwert, wenn der User noch keine Settings hat). Gespeichert werden UserSettings aber trotzdem pro User.

Wenn du aber meinst, dass UserA ein Setting ändert und UserB dieses dann beim nächsten Start sehen soll, wirst du vermutlich selber ran müssen - zumindest wüsste ich nix Built-in.
Stichwort SettingsProviderAttribute, das packst du einfach über die Settings-Klasse drüber und schon wird ein anderer Provider benutzt:

[SettingsProvider(typeof(MySettingsProvider))]
public partial class Settings
{
    // ...
}

public sealed class MySettingsProvider : SettingsProvider
{
    // ...
    public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection collection)
    {
        string settingsPath = "path to custom settings";
        var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { /* ... */ LocalUserConfigFilename = settingsPath }, /* ... */);
        var section = config.GetSection("userSettings/" + context["GroupName"]);
        // use section, return property value collection
    }
}

Hab ich schonmal implementiert um anstelle der Basis-Generierten Folder Names pro Assembly einen Shared Folder zwischen zwei Applikationen (aber gemeinsam genutzter Library) zu erreichen - allerdings trotzdem pro User und nicht User-übergreifend; drum bin ich mir nicht sicher wie es da mit Berechtigungen aussieht.

Und ist leider...recht involved, weil man defacto die Serialisierung selber übernehmen muss (ggf. mit etwas Inspiration aus ClientSettingsStore bzw. LocalFileSettingsProvider).

6.911 Beiträge seit 2009
vor 5 Jahren

Hallo inflames2k,

du kannst auch Configuration in ASP.NET Core zusammen mit Options pattern in ASP.NET Core verwenden und dort den Pfad zur Datei selbst angeben.

Einstellungen speichern (serialisieren) sollte kein Problem sein.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

16.827 Beiträge seit 2008
vor 5 Jahren

Default Settings sind Read-Only Teil der Anwendung und werden nicht in einem bestimmten Benutzerverzeichnis abgelegt.
Wenn der Benutzer dann eigene Settings hat, kommen die in den spezifischen Benutzer-Ordner.

Ein Benutzer kann keine Settings Global für andere definieren.
Das ist die Idee des Konfigurationsmodells, so funktioniert der Automatismus.

Du kannst aber natürlich sowohl das Lesen und das Schreiben der Konfigurationsdateien selbst übernehmen und wo anders speichern.

Edit: gfoidl war vor mir.

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 5 Jahren

Dachte es gäbe eventuell die Möglichkeit noch irgendwie einen eigenen Scope einzuführen. - Aber gut, werde dann mal schauen das ich etwas brauchbares zusammen bekomme.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |