User Settings eine Class Library auf Zielrechner "überschreiben"

16/04/2008 - 16:32 von Stefan Offermann | Report spam
Hallo,

ich entwickele eine Class Library, die über die User Settings in
"Properties\Settings.settings" ein paar Pfade zu Verzeichnissen
abspeichert (Arbeitsverzeichnis, Logging-Konfigurationsdatei). Diese
Settings können nun auf den Zielrechnern von den denen auf dem
Entwicklungsrechner abweichen. Daher suche ich eine Möglichkeit, die
Eintràge der Settings auf einem Zielrechner zu überschreiben.

Ich habe versucht, die (geànderte) "Settings.settings" auf dem
Zielrechner an verschiedenen Orten mit verschiedenen Namen
abzuspeichern, aber diese werden trotzdem nicht verwendet.

Wo ist der richtige Platz und wie muss die Datei heißen?

Meine dll heißt "ifgi.dll", diese wird von dem Programm
"C:\Programme\ArcGIS\bin\Arcmap.exe" verwendet. Folgendes hat bei mir
nicht funktioniert:

C:\Programme\ifgi\Settings.settings
C:\Programme\ifgi\ifgi.settings
C:\Programme\ifgi\ifgi.dll.settings
C:\Programme\ArcGIS\bin\Settings.settings
C:\Programme\ArcGIS\bin\ifgi.settings
C:\Programme\ArcGIS\bin\ifgi.dll.settings

Aufgerufen wird ein Setting z. B. so:
MessageBox.Show("Path:" + Properties.Settings.Default.WorkingPath);

Was mache ich falsch?

Gruß, Stefan
student of geoinformatic

ifgi - institute for geoinformatics
www.ifgi.de
 

Lesen sie die antworten

#1 Stefan Offermann
17/04/2008 - 15:52 | Warnen spam
Hallo NG,

es scheint keine Möglichkeit zu geben, jedenfalls nicht so wie ich mir
das vorstelle, daher habe ich mir jetzt eine Klasse geschrieben die die
Settings neben dem UserSettings-Modell jetzt auch in einer simplen
XML-Datei abspeichert. Dort kann ich jetzt auch Settings speichern und
andere Werte als eingestellt benutzen.

Falls es jemand interessiert, der Code dafür ist meiner Signatur
hinzugefügt.

Gruß,
Stefan

student of geoinformatic

ifgi - institute for geoinformatics
www.ifgi.de

using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Xml;
using System.IO;
using System.Configuration;

namespace MOFA.Services {
public class SettingService {
#region (-) Private Attributes

/// <summary>
/// Instanz des Loggers
/// </summary>
private static readonly log4net.ILog logger log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

private Dictionary<mofaSetting, object> settings;
private List<string> exceptionMessages = new List<string>();

#endregion

#region (+) Constructor

public SettingService() {
settings = new Dictionary<mofaSetting, object>();

try {
foreach (SettingsProperty setting in
Properties.Settings.Default.Properties) {
settings.Add((mofaSetting)Enum.Parse(typeof(mofaSetting),
setting.Name),
Properties.Settings.Default.PropertyValues[setting.Name].PropertyValue);
}
} catch (Exception ex) {
exceptionMessages.Add("Konnte UserSettings nicht übertragen");
exceptionMessages.Add(ex.Message);
exceptionMessages.Add(ex.StackTrace);
}
}

#endregion

#region (+) Public Methods

public T GetSetting<T>(mofaSetting key) {
if (settings.ContainsKey(key)) {
return (T)settings[key];
}
return default(T);
}

public void LoadSettings(string path) {
if (File.Exists(path)) {
try {
XmlDocument doc = new XmlDocument();
doc.Load(path);
foreach (XmlNode node in doc.FirstChild.ChildNodes) {
settings.Add((mofaSetting)Enum.Parse(typeof(mofaSetting),
node.Attributes["key"].InnerText), node.InnerText);
}
} catch (Exception ex) {
exceptionMessages.Add("Konnte Settings nicht auslesen");
exceptionMessages.Add(ex.Message);
exceptionMessages.Add(ex.StackTrace);
}
} else {
exceptionMessages.Add("Settings-Datei nicht gefunden: " + path);
}
}

public void SaveSettings(string path) {
try {
XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("mofa");

foreach (mofaSetting key in settings.Keys) {
XmlNode node = doc.CreateElement("setting");
node.InnerText = settings[key].ToString();

XmlAttribute keyAttribute = doc.CreateAttribute("key");
keyAttribute.InnerText = key.ToString();
node.Attributes.Append(keyAttribute);

root.AppendChild(node);
}

doc.AppendChild(root);
doc.Save(path);
} catch (Exception ex) {
logger.Error("Konnte Settings nicht schreiben", ex);
}
}

public void SetSetting(mofaSetting key, object aValue) {
if (settings.ContainsKey(key)) {
settings[key] = aValue;
} else {
settings.Add(key, aValue);
}
}

#endregion
}
}

Ähnliche fragen