2009-05-19 15 views
3

Ich habe eine Situation, in der ich mehrere Instanzen meiner WPF-Anwendung ausführen. Ich möchte, dass die Instanzen dieselbe user.config-Datei teilen. Momentan gewinnt die Instanz, die zuletzt in die Datei user.config schreibt. Ich würde es für alle Instanzen bevorzugen, die Datei user.config zu sehen und die Einstellungen neu zu laden, wenn eine andere Instanz sie ändert. Die user.config Datei ist zur Zeit befindet sich hier:Wie kann ich die Datei user.config ansehen und die Einstellungen neu laden, wenn sie sich ändert?

C: \ Dokumente und Einstellungen \ Benutzername \ Lokale Einstellungen \ Anwendungsdaten \ Firmenname \ ExeName .exe_StrongName_ Hash \ 1.0.0.0

zum Beispiel C: \ Dokumente und Einstellungen \ usename \ Lokale Einstellungen \ Anwendungsdaten \ Unternehmen \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0

gibt es eine Möglichkeit für mich, diese voll pat zu bekommen h (einschließlich der Hash), also kann ich der Datei user.config einen Dateiwatcher hinzufügen?

Wenn ja, möchte ich die Einstellungen neu laden, wenn sich die Datei ändert. Ist es so einfach, wie diese Methode aufzurufen?

+0

Geht es Ihnen gut, wenn die nicht gespeicherten Einstellungen einer Instanz von einer anderen Instanz überschrieben werden? Es scheint mir, dass der Benutzer nicht erwartet, dass alle Einstellungen zurückgesetzt werden. Stellen Sie zumindest einen Dialog dafür auf. –

+0

Zum größten Teil ja. Ich versuche zu vermeiden, dass es darauf ankommt, welche Instanz zuletzt geschlossen wurde. Momentan sind die Einstellungen für die letzte abgeschlossene Instanz diejenigen, die gespeichert werden. –

Antwort

6

Ich habe es gefunden. Der folgende Code gibt den Pfad zur Datei user.config zurück. Sie müssen einen Verweis auf System.Configuration.dll

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
string path = config.FilePath; 

Jetzt kann ich ein FileSystemWatcher, um informiert, wenn die Dateiänderungen verwenden, um hinzuzufügen.

0

könnten Sie das FileSystemWatcher-Steuerelement verwenden?

hat es eine modifizierte Ereignis, das Sie auslösen können

+2

Ja, aber ich weiß nicht, wie ich den Pfad zu der Datei ermitteln kann, die ich sehen muss. Der Pfad sieht folgendermaßen aus: C: \ Dokumente und Einstellungen \ Benutzername \ Lokale Einstellungen \ Anwendungsdaten \ Company \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0. Gibt es eine Möglichkeit, diesen Pfad zu erstellen? –

+0

Woher weiß das Programm, wo es ist Ich weiß, dass Sie Umgebungsvariablen verwenden können, um den Benutzernamen zu finden und was nicht. Wenn der Rest nicht statisch ist, weiß ich nicht, was die Konvention ist. – Crash893

+1

Richtig, das ist mein Problem. Ich weiß nicht, wie man den "_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko" Teil des Pfades bekommt. –

1

Sie den Dateicache sollte und CacheDependency implementieren, so dass, wenn eine Änderung an der Datei wird die Datei in den Cache geladen wird. Ich verwende eine Erlaubnis-XML-Datei in meiner Anwendung, die im Cache gespeichert und neu geladen wird, wenn die Datei geändert wird. Hier ist der Code:

protected void Page_Load(object sender, EventArgs e) 
{ 
     XmlDocument permissionsDoc = null; 

     if (Cache["Permissions"] == null) 
     { 
      string path = Server.MapPath("~/XML/Permissions.xml"); 
      permissionsDoc = new XmlDocument(); 
      permissionsDoc.Load(Server.MapPath("~/XML/Permissions.xml")); 
      Cache.Add("Permissions", permissionsDoc, 
          new CacheDependency(Server.MapPath("~/XML/Permissions.xml")), 
          Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, 
        CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack)); 
     } 
     else 
     { 
      permissionsDoc = (XmlDocument)Cache["Permissions"]; 
     } 
} 

private void ReloadPermissionsCallBack(string key, object value, CacheItemRemovedReason reason) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(Server.MapPath("~/XML/Permissions.xml")); 
     Cache.Insert("Permissions", doc , 
          new CacheDependency(Server.MapPath("~/XML/Permissions.xml")), 
          Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, 
        CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack)); 
    } 

Caching wird auch Ihre Anwendungsleistung erhöhen.

+0

So etwas könnte funktionieren, aber mein größtes Problem ist ich Ich kenne den Pfad zur Datei user.config nicht. Ich verwende die integrierten Anwendungseinstellungen (http://msdn.microsoft.com/en-us/library/a65txexh.aspx) und weiß nicht, wie ich den Pfad erstellen soll, den MS für das Verzeichnis user.config ausgewählt hat. Es sieht folgendermaßen aus: C: \ Dokumente und Einstellungen \ Benutzername \ Lokale Einstellungen \ Anwendungsdaten \ Company \ 5kAdCon.exe_StrongName_gxh0g12uyafipnfrslaggvy4vvk01fko \ 1.0.0.0 –

Verwandte Themen