Laden...

Config.Exe aus definiertem Verzeichnis starten und diese Werte verwe

Erstellt von oehrle vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.656 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 6 Jahren
Config.Exe aus definiertem Verzeichnis starten und diese Werte verwe

Hallo, ich habe eine WPF-Anwendung (FW4.0), bei der verbiege ich bei Appliaktionsstart den Pfad der Konfigurationsdatei xxx.config.exe.

Das passiert so:


 string ExeDatei = Path.GetFileName(Assembly.GetEntryAssembly().GetName().CodeBase);

            programmePfad += ExeDatei.Remove(ExeDatei.Length - 4) + @"\";
            programmePfad += ExeDatei + ".config";
            AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", programmePfad);

In meiner neuen Applikation funktioniert das nicht mehr. Wenn ich Einträge in das xxx.config.exe zurückschreibe, das funktioniert. Aber beim Programmstart werden die Einträge aus der config.exe aus dem Installationsort von "ClickOnce" abgerufen. Ist doch komisch. Aber beide Applikationen werden mit "ClickOnce" installiert, aktualisiert.
Hat jemand eine Idee an was das lieen könnte?

D
985 Beiträge seit 2014
vor 6 Jahren

Nur so am Rande bemerkt:

Kennst du schon File.ChangeExtension?

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo oehrle,

Hat jemand eine Idee an was das lieen könnte?

Konkret nicht, außer vllt. an eine Besonderheit (einem Feature) von ClickOnce.

Schreib die zu ändernden Einstellungen besser in eine separate Datei und pack diese in AppData. Also getrennt von app.config, da du so mehr Kontrolle hast.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 6 Jahren
AppData

Hallo gfoidl, muss da etwas bestimmtes beachtet werden? Eigentlich ist das so, das ich gerne Applikationsrelevate Daten die Userunabhängig sind das speichern würde. Eigentlich wäre es auch toll, wenn diese daten nach einem "ClickOnce"-Update noch gültig wären.

Also, wenn ich da so eine extra Konfigurationsdatei erstelle, dann wäre das gut wenn man diese so wie die Config.exe behandeln könnte. Allerdings arbeite ich immer nur mit einer "NameValueCollection", dann müßte ich mehr als eine verwenden, weil ich dann mehr als eine Konfigurtionsdateien habe.
Ich glaube da gibt es noch eine weitere Möglichkeit. Man kann in der confi.exe einen Verweis auf eine weitere Konfigurationsdatei erstellen, die über den anegebenen Pfad also auch "userdefiniert" abelegt ist. Muss ich mal abprüfen.

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo oehrle,

muss da etwas bestimmtes beachtet werden?

Schau z.B. Where do I put my data to keep it safe from ClickOnce updates?, da steht das wie ich es meinte in/mit AppData.

diese so wie die Config.exe behandeln könnte. Allerdings arbeite ich immer nur mit einer "NameValueCollection"

Lass die app.config einfach als Config für die App so stehen und pack "deine" Konfiguration, die wie du schreibst Name-Values sind in eine xml, json, etc. Datei. Mit einer simplen Hilfsklasse die per Indexer (key = Name) auf Values zugreifst hast du eine einfache und saubere Lösung.

Da ist das herumhacken in app.config schwierigern, fehleranfälliger, etc.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 6 Jahren

Ok, danke für die Info. Eine tolle Sache habe ich noch gefunden. Man kann ja auch einen Link auf eine Datei erstellen.
Weil das jetzt auf die "Schnelle" sehr flott ging, habe ich das gemacht, damit die Leute vorerst mit meiner Appliaktion weiterarbeiten können.

Referenz für "Windows Script Host Object Model" hinzufügen,

"using IWshRuntimeLibrary;"
einfügen.


 IwsRntLib.WshShell shell = new IwsRntLib.WshShell();
                
                //// Pfad wo die Verknüpfung abgelegt werden soll
                string path = linkablageverzeichnis + "\\linkName.lnk";
                IwsRntLib.IWshShortcut link = (IwsRntLib.IWshShortcut)shell.CreateShortcut(path);
                
                //// Ziel vom Link (die Datei, die dann verlinkt werden soll). Hier die "xxxx.Config.Exe" abrufen mit "OpenExeConfiguration", dann diesen Pfad übergeben.
                string pfadLink = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;
                link.TargetPath = pfadLink;
                link.WorkingDirectory = pfadLink;
                link.Description = "Verlinkte Config.Exe-Datei";
                //link.IconLocation = ;

                link.Save();

Somit kann man die Cofig.Exe in einem Userbereich in einem gewissen Verzeichnis das evtl. den Namen der Appliaktion per Link ablegen.
Das andere werde ich bei Gelegenheit noch testen.