2013-03-23 8 views
6

Ich habe ein Programm, das ich mithilfe des Pakets zur Bereitstellung in VS implementieren werde.Den Benutzern erlauben, die Konfigurationsdatei nach der Bereitstellung zu bearbeiten

Jetzt habe ich eine app.config Datei, die ich den Benutzer ändern können soll (auch nach dem Ausführen des Programms), aber ich habe keine Ahnung, wo genau der Installer die Dateien ablegt, und ich erwarte nicht Benutzer root um ihr Dateisystem.

Was ich dachte ist - ich frage den Benutzer ein Verzeichnis anzugeben (was sowieso passieren muss, da es ein Spiel ist) - Ich überprüfe dort die Konfigurationsdatei, und wenn es nicht dort ist, kopiere ich es aus dem root Verzeichnis, das das Programm sehen kann - lesen Sie dann das im Ordner "save".

Das heißt, es klingt wie eine sehr hässliche und hacky Lösung - gibt es eine bessere?

Antwort

8

Ich würde Benutzer nicht dazu ermutigen, die app.config zu ändern. Die Datei app.config wird in das gleiche Verzeichnis wie Ihre App-Exe kopiert und enthält normalerweise Einstellungen, von denen Ihre App abhängig ist, damit sie korrekt ausgeführt werden, z. DB-Verbindungszeichenfolgen, Systemstandards usw. Sie spielen ein gefährliches Spiel, indem Sie den Benutzern erlauben, Einstellungen direkt dort zu ändern.

Eine sicherere Methode wäre, eine andere XML-Datei in den Ordner Benutzerdokumente zu exportieren, wo sie die App-Einstellungen überschreiben kann. Lassen Sie Ihre App zuerst in der app.config laden und überschreiben Sie diese Werte dann mit den Einstellungen in der eigenen Konfigurationsdatei des Benutzers.

Ich würde auch empfehlen, eine Art von UI dafür zu implementieren, auch wenn es wirklich grundlegend ist. Ihr durchschnittlicher Benutzer wird nicht in der Lage sein, XML direkt zu bearbeiten, zu viel Spielraum für Fehler.

+0

Einverstanden - den Benutzer direkt die app.config bearbeiten zu lassen, verlangt Ärger, weil es schwieriger für Sie ist, alle möglichen Ausnahmen zu behandeln. Wenn Sie Ihre eigene serlializable Klasse rollen und ihren Speicher selbst verwalten, ist es einfacher, Ausnahmen zu behandeln. –

+0

Interessant, hat das nicht berücksichtigt. Ich denke, ich werde mein eigenes Format erstellen, da ich kein allzu großer Fan von handmodifizierendem XML bin, und ich bin mir nicht sicher, wie viele Parameter ich brauche (wahrscheinlich Tonnen) – Haedrian

+0

Nichts gegen das Rollen deines eigenes Format, aber beachten Sie, dass Sie auch Ihren eigenen Serializer rollen müssen. Wobei als .NET eine tolle XML-Unterstützung verbacken wird, bei der man sowas trivial machen könnte. – James

1

Sie können die Anwendungs- (oder Benutzer-) Einstellungen verwenden, um Änderungen beizubehalten, die der Benutzer möglicherweise in der Konfiguration vornehmen möchte. Siehe die ApplicationSettingsBase Klasse und this article. Sagen Sie Ihre Anwendung enthält eine Benutzereinstellung Score genannt, intern durch eine Klasse verwaltet MyUserSettings genannt:

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

Sie können die aktuellen Werte speichern, in der Regel, wenn die Hauptform schließt, die Save Methode:

myUserSettings.Save(); 

Wenn Sie möchten, dass Benutzer einige Einstellungen direkt ändern, können Sie ein Eigenschaftsraster oder ein eigenes Formular verwenden, das die Instanz der MyUserSettings-Klasse bindet. Wenn die Einstellungen als "Benutzer" markiert sind, werden die Werte in der Datei user.config, in %InstallRoot%\Documents and Settings\username\Local Settings oder %InstallRoot%\Documents and Settings\username\Application Data (für servergespeicherte Profile) gespeichert.