Windows 8 Settings speichern

Unter dem Motto alles ganz anders und doch ähnlich, steht das speichern von Settings mit WinRT. ganz ähnlich wie bei Silverlight kann man einzelne Werte in ein Key Value Dictionary anlegen oder direkt komplexe Datentypen serialisieren und per Dateizugriff lesen und schreiben. Zusätzlich kann man aber nun die Dictionarys in Container gruppieren. Vermutlich um Gruppen von Einstellungen leichter handhaben zu können.

Der Große Unterschied ist, das es kein IsolatedStorage gibt. Die Daten werden entweder lokal, Temporär oder Roaming und damit in der Cloud gespeichert.

Dim localSettings As Windows.Storage.ApplicationDataContainer = 
Windows.Storage.ApplicationData.Current.LocalSettings

Dim temporaryFolder As Windows.Storage.StorageFolder =
Windows.Storage.ApplicationData.Current.TemporaryFolder


Dim roamingSettings As Windows.Storage.ApplicationDataContainer =
Windows.Storage.ApplicationData.Current.RoamingSettings

Speichern eines Wertes per Key lokal

  localSettings.Values("hannes") = textbox1.Text + " " + Date.Now
   

Gruppieren per Container

 localSettings.CreateContainer("hannescontainer", ApplicationDataCreateDisposition.Always)
 localSettings.Containers("hannesontainer").Values("eins") = textbox1.Text + " " + Date.Now

Speichern im Temp Folder ( bei mir C:\Users\pre\AppData\Local\Packages\BUILD.588a3b42-fdba-460e-8a17-f527a66ad183_89gf582k2a27c\TempState )

 Dim tf As StorageFile = Await temporaryFolder.CreateFileAsync("hannes.txt",
      CreationCollisionOption.ReplaceExisting)
 Await FileIO.WriteTextAsync(tf, textbox1.Text + " " + Date.Now)

Bisher konnte ich nicht herausfinden wann der Inhalt des Tempfolders wieder geleert wird.

Die letzte Möglichkeit ist das Speichern in der Cloud, als Roaming bezeichnet. Damit kann der Benutzer von einem Gerät zum anderen wechseln und dort weiter arbeiten. Um das Änderungen in der Konfiguration mitzubekommen gibt es auch ein Event DataChanged (Windows.Storage.ApplicationData.Current.DataChanged ).

Mit folgendem VB.NET Code Beispiel wird gesichert

 roamingSettings.Values("hannesroaming") = textbox1.Text + " " + Date.Now

In der Microsoft Cloud gibt es natürlich auch Beschränkungen, die man per Code auslesen kann.

 '  textblock1.Text = ApplicationData.Current.RoamingStorageQuota
 textblock1.Text = ApplicationData.Current.RoamingFolder.Path

Das speichern erledigt WinRT allerdings asynchron. Zuerst werden die Settings in der normalen Settings.dat Datei lokal gespeichert. Erst nach einigen Sekunden, funkt Windows 8 zu Microsoft und übergibt in einem komprimierten XML Format die Daten, wie der Screenshot mit Fiddler zeigt.

image

Ohne es zu wissen, kann das Roaming nur über die Windows ID (Live ID) funktionieren. Bei meinem Samsung XE700 melde ich mich mit der Live ID an. Wie das ist mit einer Domain Anmeldung, habe ich noch nicht getestet und auch  nicht in der Doku gefunden.

Kommentar schreiben