Dove sono archiviati Properties.Settings.Default?


145

Pensavo di saperlo, ma oggi mi viene smentito - di nuovo.

Esecuzione di VS2008, .NET 3.5 e C #. Ho aggiunto le impostazioni utente alla scheda Impostazioni proprietà con i valori predefiniti, quindi le ho lette usando questo codice:

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

Quindi, dopo che l'utente ha modificato il valore nella finestra di dialogo delle opzioni, lo salvo in questo modo:

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

La mia domanda è: dove viene salvato questo nuovo valore? il file MyApp.exe.config nella directory eseguibile non viene aggiornato, contiene ancora i valori predefiniti. Inoltre, per quanto ne so, nessuno degli altri file in quella directory viene aggiornato! Tuttavia, quando il programma legge nuovamente il valore, ottiene il valore modificato, quindi so che è stato salvato da qualche parte ...

Questo non è solo accademico, dovevo essere in grado di modificare manualmente il valore questa mattina e mi sono lasciato sconcertato quando non sono riuscito a trovare nulla che stesse cambiando.


2
È importante notare che la posizione di archiviazione può cambiare tra le diverse versioni del framework o del sistema operativo. Non codificare nulla di programmatico nella posizione di archiviazione.
Greg D,

Se sei in Visual Studio, stai sviluppando una nuova app, quindi controlla AppData \ Local \ Microsoft \ IL NOME DELLA TUA APPLICAZIONE Il nome del file è user.config. Sono in Windows 7
JenonD,

o sotto AppData \ Local
KansaiRobot,

Qualcosa con cui stavo lottando che mi ha portato a questa domanda e altre: user.config non è stato creato fino a applicationSettings.Save (); è chiamato. (dove applicationSettings è definito ApplicationSettings applicationSettings = new ApplicationSettings (this);).
riuniscono il

Risposte:


142

Per funzionare con le versioni più recenti del criterio di Windows che consente solo l'accesso in lettura per impostazione predefinita alla cartella Programmi (a meno che non richieda l'elevazione con UAC, ma questo è un altro argomento ...), l'applicazione avrà una cartella delle impostazioni in %userprofile%\appdata\localo %userprofile%\Local Settings\Application Dataa seconda della versione di Windows in uso, per impostazioni specifiche dell'utente. Se memorizzi le impostazioni per tutti gli utenti, saranno nella cartella corrispondente sotto C:\userso C:\Documents and Settingsper tutti i profili utente (es:) C:\users\public\appdata\local.


3
Inoltre, il .config generato in Visual Studio, che finisce nella cartella dell'eseguibile, credo sia usato solo per il debug. Quando impacchetti l'applicazione finale, non includi questo .config, poiché viene generato la prima volta che l'utente esegue l'applicazione.
Will Eddins l'

11
Versioni più recenti? Questo è stato il caso da Windows 2000. L'hai appena fatto perché stavi funzionando come amministratore.
Joel Coehoorn,

1
@Joel Coehoorn: True, tuttavia ora nell'account amministratore in Windows Vista e successivi, per impostazione predefinita non è possibile ottenere l'accesso in scrittura ai Programmi senza un prompt di elevazione UAC. Questa è la politica che è cambiata. :)
Jasonh,

2
Va inoltre notato che la cartella cambia ad ogni aggiornamento di versione, quindi l'utente perde le proprie preferenze ogni volta che si aggiorna il software.
Ian Boyd,

17
In realtà no, non lo fanno. È necessario creare un'impostazione, denominarla in modo simile a "UpgradeNeeded" e impostarla su true. Quindi quando viene avviata l'app, controlla questo. Se è vero, chiama Properties.Settings.Default.Upgrade (), .Save () e .Reload (). Quindi ripristinare UpgradeNeeded su false e salvare.
Jasonh,

86

Puoi ottenere il percorso a livello di codice:

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

1
Hmm, sto vedendo situazioni in cui il percorso restituito da questo NON è il percorso utilizzato da Impostazioni. Qualche idea?
George Mauer,

1
@GeorgeMauer Intendi Roamingo forse LocalLowinvece di Local? ConfigurationUserLeveldipende dal profilo dell'utente in roaming o locale. Nelle aziende è spesso in roaming.
Kay Zed,

Collegamento a questa risposta e ai miei commenti sotto di essa, che mostrano l'aspetto del percorso.
Kay Zed,

Trovo la stessa risposta ovunque, uso ConfigurationManager.OpenExeConfiguration () - ma questo offre tre opzioni a seconda del valore di ConfigurationUserLevel che passi, che danno tre risultati diversi - che cos'è? Come si scopre, in un programma, nel codice, in fase di esecuzione, esattamente da quale file il programma riceve le sue impostazioni?
Dave,

Nessuna: ottiene la configurazione che si applica a tutti gli utenti, PerUserRoaming: ottiene la configurazione di roaming che si applica all'utente corrente, PerUserRoamingAndLocal: ottiene la configurazione locale che si applica all'utente corrente.
Akbaritabar

8

grazie per avermi indicato nella giusta direzione. Ho trovato user.config situato in questa mostruosità: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Ho dovuto aggiornare la versione sulla mia applicazione e tutte le impostazioni sembravano essere svanite. l'applicazione ha creato una nuova cartella con la nuova versione e ha utilizzato le impostazioni predefinite. ci volle un'eternità per trovare dove era archiviato il file, ma poi fu una semplice copia e incolla per riportare le impostazioni alla nuova versione.


Come sapere LOOKSLIKESOMEKINDOFHASH?
NeoSvet,

1
La chiamata Properties.Settings.Default.Upgrade () farebbe lo stesso automaticamente. Ripristina la configurazione dalla sua versione precedente, proprio come ha detto @jasonh in un'altra risposta sopra.
Alex

5

viene salvato in Documents and Settings \% user% \ Local Settings \ Application Data ...... etc cerca un file chiamato user.config

la posizione può tuttavia cambiare.


5
In realtà, la variabile di ambiente corretta per le proprietà specifiche dell'utente è% userprofile%. Se si specificano Documenti e Impostazioni in Vista o 7, si otterrà una cartella mancante o autorizzazioni mancanti per la cartella trovata.
Jasonh,

1

Uno dei miei servizi di Windows è connesso come Sistema locale in Windows Server 2016 e posso trovare user.config in C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {nome dell'applicazione}.

Penso che il modo più semplice sia cercare il nome dell'applicazione sull'unità C e quindi controllare dov'è user.config


0

Le impostazioni specifiche dell'utente vengono salvate nella cartella Dati applicazioni dell'utente per tale applicazione. Cerca auser.config file.

Non so cosa ti aspettassi, dal momento che gli utenti spesso non hanno nemmeno accesso in scrittura alla directory eseguibile in primo luogo.


0

Vengono salvati YOUR_APP.exe.config, il file viene salvato nella stessa cartella con il YOUR_APP.exefile, <userSettings>sezione:

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

ecco il codice 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

Per chiunque si chieda dove sono le impostazioni per le app di Microsoft Store, si trovano in WindowsApps, che è molto bloccato, ma puoi arrivarci aprendo l'app e quindi aprendo il percorso del file con Task-Manager.

Ma è più probabile che vengano salvati C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

Esiste una cartella denominata "Proprietà" nella cartella principale del progetto e in quella cartella sono presenti file * .settings. Ecco dove viene memorizzato.


1
è giusto durante lo sviluppo . Dopo la distribuzione vanno altrove.
Joel Coehoorn,

2
l'ho fatto funzionare in un ambiente di sviluppo e il file è rimasto invariato. memorizza solo il valore predefinito lì, non l'aggiornamento.
Stan R.,

4
Stan R è corretto, memorizza solo il valore predefinito. Non i valori che è possibile modificare durante il debug.
Tipo anonimo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.