2013-03-23 8 views
6

Ho un programma che distribuirò utilizzando il pacchetto per la distribuzione incorporata in VS.Lasciando che gli utenti modifichino il file di configurazione dopo l'implementazione

Ora ho un file app.config che voglio che l'utente sia in grado di modificare (anche dopo aver eseguito il programma), ma non ho idea di dove esattamente l'installer scarica i file, e non mi aspetto gli utenti a fare il giro del loro filesystem.

Quello che stavo pensando è - chiedo all'utente di specificare qualche directory (che deve comunque succedere da quando è un gioco) - Controllo il file di configurazione lì, e se non è lì, lo copio dalla radice directory che il programma può vedere - quindi leggere quella nella cartella 'save'.

Detto questo, sembra una soluzione molto brutta e hacky - ce n'è una migliore?

risposta

8

Non vorrei incoraggiare gli utenti a modificare app.config. App.config viene copiato nella stessa directory del tuo exe dell'app e in genere contiene impostazioni da cui la tua app dipende per funzionare correttamente, ad es. Stringhe di connessione DB, impostazioni predefinite di sistema, ecc. Giocando a un gioco pericoloso, gli utenti possono modificare direttamente le impostazioni.

Un approccio più sicuro sarebbe quello di esportare un altro file XML nella cartella documenti degli utenti in cui possono sovrascrivere le impostazioni dell'app. Avere prima caricato la propria app in app.config, quindi eseguire l'override di tali valori con qualsiasi impostazione trovata nel file di configurazione dell'utente.

Vorrei anche raccomandare di implementare una sorta di interfaccia utente per questo, anche se è davvero di base. Il tuo utente medio non si sentirà a suo agio nel modificare direttamente XML, troppi margini di errore.

+0

Concordato: lasciare che l'utente modifichi direttamente l'app.config è un problema perché è più difficile per te gestire eventuali eccezioni che potrebbero risultare. Se esegui il rollover della tua classe serializzabile e ne gestisci l'archiviazione da solo, è più semplice gestire le eccezioni. –

+0

Interessante, non lo ha considerato. Penso che avrò il mio formato personale dato che non sono un grande fan dell'XML che modifica la mano, e non sono sicuro di quanti parametri ho bisogno (probabilmente tonnellate) – Haedrian

+0

Niente contro il rotolamento del tuo il proprio formato, tuttavia, si noti che è anche necessario eseguire il rollover del proprio serializzatore. Dove .NET ha un ottimo supporto XML nel quale farebbe qualcosa di banale come questo. – James

1

È possibile utilizzare le impostazioni dell'applicazione (o dell'utente) per mantenere le modifiche che l'utente potrebbe voler apportare nella configurazione. Vedere la classe ApplicationSettingsBase e this article. dire la vostra applicazione contiene un'impostazione utente chiamato Score, gestito internamente da una classe chiamata MyUserSettings:

public class MyUserSettings : ApplicationSettingsBase 
{ 
    [UserScopedSetting()] 
    [DefaultSettingValue(0)] 
    public int Rank 
    { 
     get 
     { 
      return (int)this["Score"]; 
     } 
     set 
     { 
      this["Score"] = value; 
     } 
    } 
} 

è possibile salvare i valori correnti, di solito quando la forma principale sta chiudendo, con il metodo Save:

myUserSettings.Save(); 

Se si desidera che gli utenti modifichino direttamente alcune impostazioni, è possibile utilizzare una griglia di proprietà o il proprio modulo che associa l'istanza della classe MyUserSettings. Se le impostazioni sono contrassegnate come "Utente", i valori saranno memorizzati nel file user.config, in %InstallRoot%\Documents and Settings\username\Local Settings o %InstallRoot%\Documents and Settings\username\Application Data (per i profili di roaming).

Problemi correlati