Gdzie są przechowywane Properties.Settings.Default?


145

Myślałem, że to wiem, ale dzisiaj udowodniono mi, że się mylę - znowu.

Uruchamianie VS2008, .NET 3.5 i C #. Dodałem ustawienia użytkownika do zakładki Ustawienia właściwości z wartościami domyślnymi, a następnie wczytułem je za pomocą tego kodu:

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

Następnie, po edycji przez użytkownika wartości w oknie dialogowym opcji, zapisuję ją w następujący sposób:

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

Moje pytanie brzmi: gdzie jest zapisana ta nowa wartość? plik MyApp.exe.config w katalogu wykonywalnym nie jest aktualizowany, nadal zawiera wartości domyślne. Poza tym, o ile wiem, żaden z innych plików w tym katalogu też nie jest aktualizowany! Jednak gdy program wczyta wartość z powrotem, pobiera zmienioną wartość, więc wiem, że jest gdzieś zapisana ...

To nie jest tylko kwestia naukowa. Musiałem mieć możliwość ręcznej edycji wartości dziś rano i wpadłem w zakłopotanie, gdy nie mogłem znaleźć niczego, co się zmienia.


2
Należy pamiętać, że lokalizacja przechowywania może się zmieniać między różnymi wersjami frameworka lub systemu operacyjnego. Nie koduj na stałe niczego programistycznego w lokalizacji przechowywania.
Greg D

Jeśli pracujesz w programie Visual Studio i opracowujesz nową aplikację, sprawdź w AppData \ Local \ Microsoft \ NAZWA TWOJEJ APLIKACJI Nazwa pliku to user.config. Jestem w systemie Windows 7
JenonD

lub pod AppData \ Local
KansaiRobot

Coś, z czym się zmagałem, doprowadziło mnie do tego i innych pytań: user.config nie jest tworzony do momentu, gdy applicationsSettings.Save (); jest nazywany. (gdzie applicationSettings jest zdefiniowana ApplicationSettings applicationSettings = new ApplicationSettings (this);).
połączono

Odpowiedzi:


142

Aby pracować z nowszymi wersjami zasad systemu Windows, które domyślnie zezwalają tylko na dostęp do odczytu do folderu Program Files (chyba że monit o podniesienie uprawnień z UAC, ale to inny temat ...), aplikacja będzie miała folder ustawień w obszarze %userprofile%\appdata\locallub %userprofile%\Local Settings\Application Dataw zależności od używanej wersji systemu Windows, dla ustawień specyficznych dla użytkownika. Jeśli przechowujesz ustawienia dla wszystkich użytkowników, będą one znajdować się w odpowiednim folderze w ramach C:\userslub C:\Documents and Settingsdla wszystkich profili użytkowników (np .:) C:\users\public\appdata\local.


3
Ponadto plik .config wygenerowany w programie Visual Studio, który trafia do folderu pliku wykonywalnego, jest moim zdaniem używany tylko do debugowania. Podczas pakowania ostatecznej aplikacji nie należy dołączać tego pliku .config, ponieważ jest on generowany przy pierwszym uruchomieniu aplikacji przez użytkownika.
Will Eddins

11
Nowsze wersje? Tak było od czasu systemu Windows 2000. Po prostu uszło ci to na sucho, ponieważ pracowałeś jako administrator.
Joel Coehoorn

1
@Joel Coehoorn: To prawda, ale teraz na koncie administratora w systemie Windows Vista i nowszych nie można domyślnie uzyskać dostępu do zapisu w plikach programu bez monitu o podniesienie uprawnień UAC. Taka jest polityka, która się zmieniła. :)
jasonh

2
Należy również zauważyć, że folder zmienia się przy każdej aktualizacji wersji - więc użytkownik traci swoje preferencje za każdym razem, gdy aktualizujesz oprogramowanie.
Ian Boyd

17
Właściwie nie, nie robią. Musisz utworzyć ustawienie, nazwać je w stylu „UpgradeNeeded” i ustawić jako domyślne. Następnie po uruchomieniu aplikacji sprawdź to. Jeśli to prawda, wywołaj Properties.Settings.Default.Upgrade (), .Save () i .Reload (). Następnie zresetuj UpgradeNeeded na false i zapisz.
jasonh

86

Możesz uzyskać ścieżkę programowo:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

1
Hmm, widzę sytuacje, w których ścieżka zwrócona przez to NIE jest ścieżką używaną przez Ustawienia. Jakieś spostrzeżenia?
George Mauer

1
@GeorgeMauer Masz na myśli Roamingczy może LocalLowzamiast Local? ConfigurationUserLevelzależy od profilu użytkownika mobilnego lub lokalnego. W firmach jest to często roaming.
Kay Zed

Link do tej odpowiedzi i moich komentarzy pod nią, pokazujący, jak wygląda ścieżka.
Kay Zed

Wszędzie znajduję tę samą odpowiedź, użyj ConfigurationManager.OpenExeConfiguration () - ale to daje trzy opcje w zależności od tego, którą wartość ConfigurationUserLevel podajesz, które dają trzy różne wyniki - co to jest ?. W jaki sposób można dowiedzieć się w programie, w kodzie, w czasie wykonywania, z jakiego dokładnie pliku program pobiera swoje ustawienia?
Dave

None: Pobiera konfigurację, która ma zastosowanie do wszystkich użytkowników, PerUserRoaming: Pobiera konfigurację mobilną, która ma zastosowanie do bieżącego użytkownika, PerUserRoamingAndLocal: Pobiera lokalną konfigurację, która ma zastosowanie do bieżącego użytkownika.
Akbaritabar

8

Dzięki za wskazanie mi właściwego kierunku. Znalazłem user.config znajdujący się pod tym monstrum: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Musiałem zaktualizować wersję mojej aplikacji i wydawało się, że wszystkie ustawienia zniknęły. aplikacja utworzyła nowy folder z nową wersją i użyła ustawień domyślnych. znalezienie miejsca przechowywania pliku trwało wieki, ale wystarczyło go skopiować i wkleić, aby uzyskać ustawienia do nowej wersji.


Skąd wiesz, LOOKSLIKESOMEKINDOFHASH?
NeoSvet

1
Właściwości.Settings.Default.Upgrade () zrobiłoby to samo automatycznie. Przywraca konfigurację z poprzedniej wersji, tak jak @jasonh powiedział w innej odpowiedzi powyżej.
Alex

5

jest ona zapisana w Documents and Settings \% user% \ Local Danych Settings \ Application ...... etc szukać pliku o nazwie user.config tam

lokalizacja może się jednak zmienić.


5
W rzeczywistości poprawną zmienną środowiskową dla właściwości specyficznych dla użytkownika jest% userprofile%. Określenie dokumentów i ustawień w systemie Vista lub 7 spowoduje brak folderu lub brak uprawnień do znalezionego folderu.
jasonh

1

Jedna z moich usług systemu Windows jest zalogowana jako system lokalny w systemie Windows Server 2016 i mogę znaleźć plik user.config w C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {nazwa aplikacji}.

Myślę, że najłatwiejszym sposobem jest wyszukanie nazwy aplikacji na dysku C, a następnie sprawdzenie, gdzie jest plik user.config


0

Ustawienia specyficzne dla użytkownika są zapisywane w folderze danych aplikacji użytkownika dla tej aplikacji. Poszukaj user.configpliku.

Nie wiem, czego się spodziewałeś, ponieważ użytkownicy często nie mają nawet prawa zapisu do katalogu wykonywalnego.


0

Są zapisywane w YOUR_APP.exe.config, plik jest zapisywany w tym samym folderze co YOUR_APP.exeplik, <userSettings>sekcja:

   <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>

tutaj jest kod cs:

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;
    }
...

-1

Dla każdego, kto zastanawia się, gdzie są ustawienia aplikacji ze sklepu Microsoft Store, są one albo w WindowsApps, który jest bardzo zablokowany, ale możesz się tam dostać, otwierając aplikację, a następnie otwierając ścieżkę do pliku za pomocą Menedżera zadań.

Ale bardziej prawdopodobne jest, że zostaną zapisane w C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

W folderze głównym projektu znajduje się folder „Właściwości”, w którym znajduje się plik * .settings. Tam jest przechowywany.


1
jest dobrze podczas rozwoju . Po wdrożeniu idą gdzie indziej.
Joel Coehoorn

2
miałem to uruchomione w środowisku programistycznym, a plik pozostał niezmieniony. przechowuje tam tylko wartość domyślną, a nie zaktualizowaną.
Stan R.

4
Stan R jest poprawny, przechowuje tylko wartość domyślną. Nie wartości, które możesz zmienić podczas debugowania.
Anonimowy typ
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.