WPF / C #: dove dovrei salvare i file delle preferenze dell’utente?

Qual è la posizione consigliata per salvare i file delle preferenze dell’utente? Esiste un metodo consigliato per gestire le preferenze dell’utente?

Attualmente utilizzo il percorso restituito da typeof(MyLibrary).Assembly.Location come percorso predefinito per archiviare i file generati o richiesti dall’applicazione.

EDIT: ho trovato due domande correlate / interessanti:

  • Il posto migliore per salvare le informazioni utente per le applicazioni Windows XP e Vista
  • Qual è il modo di implementare la funzionalità Salva / Carica?

EDIT # 2: Questa è solo una nota per le persone come me che non avevano mai usato le impostazioni prima. Le impostazioni sono piuttosto utili, ma ho dovuto fare un sacco di scavi per capire cosa stava succedendo (proveniente dal mondo Python, non è qualcosa che anch’io sono usato). Le cose si sono complicate perché volevo salvare i dizionari e apparentemente non possono essere serializzati. Anche le impostazioni sembrano essere memorizzate in 3 file diversi a seconda di ciò che fai. C’è un app.config , user.config e un file settings.setting . Quindi ecco altri due link che ho trovato utili:

  • http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ddeaca86-a093-4997-82c9-01bc0c630138
  • http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/efe370dc-f933-4e55-adf7-3cd8063949b0/

È ansible utilizzare le impostazioni dell’applicazione abbastanza facilmente.

Se non lo hai fatto prima fai clic con il tasto destro del mouse sul progetto e scegli Proprietà. Seleziona la scheda Impostazioni. Assicurati di aver scelto “Utente” per l’ambito (altrimenti l’impostazione è di sola lettura).

Il codice per accedere a questo è semplice:

 forms.Width = Application1.Properties.Settings.Default.Width; 

Se hai bisogno di salvarlo:

 Application1.Properties.Settings.Default.Width = forms.Width; Application1.Properties.Settings.Default.Save(); 

Nell’esempio sopra riportato, Width è il nome dell’impostazione personalizzata definito nella scheda Impostazioni e Application1 è lo spazio dei nomi dell’applicazione.

Modifica: risposta a ulteriori domande

Hai menzionato che volevi memorizzare gli oggetti del dizionario nelle Impostazioni. Come hai scoperto, non puoi farlo direttamente perché gli oggetti dizionario non sono serializzabili. Tuttavia, è ansible creare il proprio dizionario serializzabile abbastanza facilmente. Paul Welzer ha avuto un eccellente esempio sul suo blog .

Hai un paio di link che infastidiscono un po ‘la situazione. La tua domanda originale è dove salvare “File delle preferenze degli utenti”. Sono abbastanza certo che l’intenzione di Microsoft con la funzionalità Impostazioni è esattamente quella … memorizzare le preferenze della pelle utente, le scelte di layout, ecc. Non è inteso come un repository generico per i dati di un’applicazione, anche se potrebbe essere facilmente abusato in quel modo.

I dati sono memorizzati in luoghi separati per una buona ragione. Alcune delle impostazioni sono Impostazioni dell’applicazione e sono di sola lettura. Queste sono impostazioni che l’app deve funzionare ma non sono specifiche per un utente (ad esempio, URI per le risorse di app o forse un’aliquota fiscale). Questi sono memorizzati nell’app.config.

Le impostazioni dell’utente sono memorizzate in una directory offuscata nella cartella Documenti / Impostazioni utente. Le impostazioni predefinite sono memorizzate in app.config (penso, non posso richiamarle per certo in cima alla mia testa) ma tutte le modifiche dell’utente sono memorizzate nella loro cartella personale. Questo è inteso per i dati che cambiano da utente a utente. (Per “utente” intendo l’utente di Windows, non l’utente della tua app.)

Spero che questo abbia chiarito un po ‘questo per te. Il sistema è in realtà piuttosto semplice. All’inizio potrebbe sembrare un po ‘strano, ma dopo alcuni giorni di utilizzo non dovrai più pensarci … funziona.

Quando si esegue come non amministratore o su Vista, non è ansible scrivere nella cartella “Programmi” (o in qualsiasi sottocartella).

La posizione corretta per memorizzare le preferenze dell’utente è (sostituire MyCompanyName e MyApplicationName con i nomi corretti, ovviamente)

Sul disco:

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName" 

O nel registro sotto la chiave:

  HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName 

Queste postazioni sono per utente e funzionano con utenti non amministratori, diversi utenti che utilizzano lo stesso computer, cambio utente rapido, servizi terminal e tutti gli altri modi in cui le persone possono interagire con il software.

Se hai bisogno di un luogo comune per tutti gli utenti, allora:

  1. Funzionerà solo quando l’utente viene eseguito come amministratore
  2. Non funzionerà in modo affidabile su Vista
  3. Devi prenderti cura di tutto tu stesso (come due utenti che eseguono l’applicazione sullo stesso computer allo stesso tempo tramite il cambio utente rapido).

e le posizioni sono:

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName" 

O nel registro sotto la chiave:

  HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName 

È ansible utilizzare la memoria isolata. Puoi isolare per utente, assemblaggio e / o dominio.

Introduzione allo storage isolato
http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

Tipi di isolamento
http://msdn.microsoft.com/en-us/library/eh5d60e1(VS.80).aspx

la seguente sembra essere l’opzione migliore:

 Application.UserAppDataPath