Wo werden die Properties.Settings.Default gespeichert?

145

Ich dachte, ich wüsste das, aber heute werde ich wieder als falsch erwiesen.

Ausführen von VS2008, .NET 3.5 und C #. Ich habe die Benutzereinstellungen mit Standardwerten zur Registerkarte Eigenschafteneinstellungen hinzugefügt und sie dann mit folgendem Code eingelesen:

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

Nachdem der Benutzer den Wert im Optionsdialog bearbeitet hat, speichere ich ihn folgendermaßen:

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

Meine Frage ist, wo wird dieser neue Wert gespeichert? Die Datei MyApp.exe.config im ausführbaren Verzeichnis wird nicht aktualisiert, enthält jedoch weiterhin die Standardwerte. Soweit ich das beurteilen kann, wird auch keine der anderen Dateien in diesem Verzeichnis aktualisiert! Wenn das Programm den Wert jedoch wieder einliest, erhält es den geänderten Wert, sodass ich weiß, dass er irgendwo gespeichert ist ...

Dies ist nicht nur akademisch, ich musste heute Morgen in der Lage sein, den Wert manuell zu bearbeiten, und war ratlos, als ich nichts fand, was sich änderte.

DaveN59
quelle
2
Es ist wichtig zu beachten, dass sich der Speicherort zwischen verschiedenen Versionen des Frameworks oder des Betriebssystems ändern kann. Codieren Sie nichts Programmatisches für den Speicherort.
Greg D
Wenn Sie sich in Visual Studio befinden und eine neue App entwickeln, überprüfen Sie unter AppData \ Local \ Microsoft \ IHR ANWENDUNGSNAME Der Dateiname lautet user.config. Ich bin in Windows 7
JenonD
oder unter AppData \ Local one
KansaiRobot
Etwas, mit dem ich zu kämpfen hatte, führte mich zu dieser und anderen Fragen: user.config wird erst erstellt, wenn applicationsSettings.Save (); wird genannt. (wobei applicationSettings definiert ist ApplicationSettings applicationSettings = new ApplicationSettings (this);).
Amalgamate

Antworten:

142

Um mit neueren Versionen der Windows-Richtlinie zu arbeiten, die standardmäßig nur den Lesezugriff auf den Ordner "Programme" zulässt (es sei denn, Sie fordern eine Erhöhung mit der Benutzerkontensteuerung an, aber das ist ein anderes Thema ...), verfügt Ihre Anwendung über einen Einstellungsordner unter %userprofile%\appdata\localoder %userprofile%\Local Settings\Application DataAbhängig von der verwendeten Windows-Version für benutzerspezifische Einstellungen. Wenn Sie Einstellungen für alle Benutzer speichern, befinden sich diese im entsprechenden Ordner unter C:\usersoder C:\Documents and Settingsfür alle Benutzerprofile (z. B. :) C:\users\public\appdata\local.

jasonh
quelle
3
Außerdem wird die in Visual Studio generierte .config, die im Ordner der ausführbaren Datei landet, meines Erachtens nur zum Debuggen verwendet. Beim Packen der endgültigen Anwendung wird diese .config nicht berücksichtigt, da sie beim ersten Ausführen der Anwendung durch den Benutzer generiert wird.
Will Eddins
11
Neuere Versionen? Dies ist seit Windows 2000 der Fall. Sie sind gerade damit durchgekommen, weil Sie als Administrator ausgeführt wurden.
Joel Coehoorn
1
@Joel Coehoorn: Richtig, aber jetzt, im Administratorkonto unter Windows Vista und höher, können Sie standardmäßig keinen Schreibzugriff auf Programmdateien erhalten, ohne eine Eingabeaufforderung zur Erhöhung der Benutzerkontensteuerung. Das ist die Politik, die sich geändert hat. :)
Jason
2
Es sollte auch beachtet werden, dass sich der Ordner bei jedem Versions-Upgrade ändert, sodass der Benutzer bei jedem Aktualisieren der Software seine Einstellungen verliert.
Ian Boyd
17
Eigentlich nein, das tun sie nicht. Sie müssen eine Einstellung erstellen, sie so etwas wie "UpgradeNeeded" nennen und standardmäßig auf "true" setzen. Wenn Ihre App startet, überprüfen Sie dies. Wenn dies der Fall ist, rufen Sie Properties.Settings.Default.Upgrade (), .Save () und .Reload () auf. Setzen Sie dann UpgradeNeeded auf false zurück und speichern Sie es.
Jason
86

Sie können den Pfad programmgesteuert abrufen:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
Akbaritabar
quelle
1
Hmm, ich sehe Situationen, in denen der von diesem zurückgegebene Pfad NICHT der von den Einstellungen verwendete Pfad ist. Irgendein Einblick?
George Mauer
1
@ GeorgeMauer Du meinst Roamingoder vielleicht LocalLowstatt Local? ConfigurationUserLevelhängt davon ab, ob das Benutzerprofil Roaming oder lokal ist. In Unternehmen ist es oft Roaming.
Kay Zed
Link zu dieser Antwort und meinen Kommentaren darunter, die zeigen, wie der Pfad aussieht.
Kay Zed
Ich finde überall die gleiche Antwort, benutze ConfigurationManager.OpenExeConfiguration () - aber das gibt drei Optionen, abhängig davon, welchen Wert von ConfigurationUserLevel Sie übergeben, welche drei verschiedene Ergebnisse liefern - welches ist es?. Wie können Sie in einem Programm, im Code und zur Laufzeit genau herausfinden, aus welcher Datei das Programm seine Einstellungen erhält?
Dave
Keine: Ruft die Konfiguration ab, die für alle Benutzer gilt. PerUserRoaming: Ruft die Roaming-Konfiguration ab, die für den aktuellen Benutzer gilt. PerUserRoamingAndLocal: Ruft die lokale Konfiguration ab, die für den aktuellen Benutzer gilt.
Akbaritabar
8

Danke, dass du mich in die richtige Richtung gelenkt hast. Ich habe user.config unter dieser Monstrosität gefunden: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Ich musste die Version in meiner Anwendung aktualisieren und alle Einstellungen schienen verschwunden zu sein. Die Anwendung hat einen neuen Ordner mit der neuen Version erstellt und die Standardeinstellungen verwendet. Es hat ewig gedauert, um herauszufinden, wo die Datei gespeichert war, aber dann war es ein einfaches Kopieren und Einfügen, um die Einstellungen auf die neue Version zu bringen.

Jeremy Ehret
quelle
Woher wissen LOOKSLIKESOMEKINDOFHASH?
NeoSvet
1
Der Aufruf von Properties.Settings.Default.Upgrade () würde dasselbe automatisch tun. Es stellt die Konfiguration aus der vorherigen Version wieder her, genau wie @jasonh in einer anderen Antwort oben gesagt hat.
Alex
5

es ist in Ihrem Dokumente und Einstellungen \% user% \ Lokale Einstellungen \ Anwendungsdaten ...... usw. für eine Datei mit dem Namen suchen gespeichert user.config dort

Der Standort kann sich jedoch ändern.

Stan R.
quelle
5
Tatsächlich ist die richtige Umgebungsvariable für benutzerspezifische Eigenschaften% userprofile%. Wenn Sie unter Vista oder 7 Dokumente und Einstellungen angeben, fehlt entweder ein Ordner oder es fehlen Berechtigungen für den gefundenen Ordner.
Jason
1

Einer meiner Windows-Dienste ist in Windows Server 2016 als lokales System angemeldet. Die Datei user.config finden Sie unter C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {Ihr Anwendungsname}.

Ich denke, der einfachste Weg ist, Ihren Anwendungsnamen auf Laufwerk C zu suchen und dann zu überprüfen, wo sich die user.config befindet

EvilDuck
quelle
0

Benutzerspezifische Einstellungen werden im Anwendungsdatenordner des Benutzers für diese Anwendung gespeichert. Suchen Sie nach einer user.configDatei.

Ich weiß nicht, was Sie erwartet haben, da Benutzer häufig überhaupt keinen Schreibzugriff auf das ausführbare Verzeichnis haben.

Joel Coehoorn
quelle
0

Sie werden in gespeichert YOUR_APP.exe.config, die Datei wird in demselben Ordner wie die YOUR_APP.exeDatei gespeichert, <userSettings>Abschnitt:

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

hier ist cs code:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...
Luke
quelle
-1

Wenn Sie sich fragen, wo sich die Einstellungen für Apps aus dem Microsoft Store befinden, befinden Sie sich entweder in WindowsApps, die sehr gesperrt sind. Sie können dies jedoch erreichen, indem Sie Ihre App öffnen und dann den Dateipfad mit dem Task-Manager öffnen.

Es ist jedoch wahrscheinlicher, dass sie gespeichert werden C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

Lukas
quelle
-17

Unter Ihrem Projektstammordner befindet sich ein Ordner mit dem Namen "Eigenschaften", und unter diesem Ordner befindet sich die Datei * .settings. Dort wird es gespeichert.

JW
quelle
1
Es ist richtig während der Entwicklung . Nach dem Einsatz gehen sie woanders hin.
Joel Coehoorn
2
Ich hatte dies in einer Entwicklungsumgebung ausgeführt und die Datei blieb unverändert. Dort wird nur der Standardwert gespeichert, nicht der aktualisierte.
Stan R.
4
Stan R ist korrekt, es speichert nur den Standardwert. Nicht die Werte, die Sie während des Debuggens ändern können.
Anonymer Typ