runfun
Goto Top

Systemvariablen auslesen und einen Satz in der config Datei beschreiben

Hallo zusammen,

ich habe eine Konfig Datei bei welcher ich den Benutzernamen schreiben muss.
Der Satz welchen ich beschreiben muss lautet :

<add key="UserName" value="%username%"/>

Ich hatte es versucht über eine Variable zu lösen, aber scheinbar kann die datei Plugin.dll.config
keine Variablen lesen. Das Feld %username% sollte also mit dem windows User befüllt werden.

Hat jemand eine Lösung ?

Vielen Dank
Gruß
Runfun

Content-Key: 665657

Url: https://administrator.de/contentid/665657

Printed on: April 19, 2024 at 08:04 o'clock

Member: Herbrich19
Solution Herbrich19 Apr 12, 2021 at 13:23:02 (UTC)
Goto Top
Hallo,

Es scheint sich um eine NetFramework Anwendung zu handeln. Du kannst mit String.Replace die Variable ersetzen und den Uusernamen bekommst du wie folgt.

Environment.UserName

Ich hoffe ich konnte dir helfen.

PS: In System.Configuration solltest du auch die Variable in die Konfig Datei schreiben können bzw die config file von quellcode aus editieren können.

LG, J Herbrich
Mitglied: 148121
148121 Apr 12, 2021, updated at Apr 13, 2021 at 08:34:38 (UTC)
Goto Top
Das ist XML und XML sollte man wenn immer möglich mit einem richtigen Parser bearbeiten, statt mit einem unsicheren Replace! Und Batch für sowas zu nehmen inzwischen auch eine eher weniger gute Idee.

Wenn die XML also bspw. so aussehen würde
<?xml version ="1.0"?>  
<configuration>
    <appSettings>
       <add key="UserName" value=""/>  
    </appSettings>
</configuration>
dann wäre der PS Code folgender
$xmlfile = 'E:\Plugin.dll.config'  
$xml = New-Object XML
$xml.Load($xmlfile)
$xml.SelectSingleNode("/configuration/appSettings/add[@key = 'UserName']").value = $env:USERNAME  
$xml.Save($xmlfile)
Gruß w.
Member: Herbrich19
Herbrich19 Apr 12, 2021 at 17:30:47 (UTC)
Goto Top
Hallo,

an sich ja, aber das ist keine "normale" xml Datei sondern eine config datei. Ich schätze Mal eine App Config oder eine Web.Config. Für diese speziellen Datein gibt es im NetFramework eigene Parser. Und diese sollten auch verwendet werden.

Eine Änderung dieser Datei kann nicht garantiert ohne weiteres durch einfaches Bearbeiten in die Laufzeit übernommen werden. Mit den Config Parser der App Config hingegen wird die Änderung nicht nur zurück geschrieben sondern auch in die Laufzeit übernommen.

LG, J Herbrich
Member: Runfun
Runfun Apr 13, 2021 at 08:31:29 (UTC)
Goto Top
Hallo Herbrich,

leider kenne ich mich mit NetFramework überhaupt nicht aus ...
Hättest Du evtl. ein Einbaubauspeil ?
Das wäre wirklich hilfreich.

Gruß
Runfun

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
<appSettings>
<add key="IsDebugModeActive" value="true"/>

<!-- Anwendung User Name-->
<!--<add key="UserName" value="SYSADMIN"/>-->
<add key="UserName" value="%username%"/>
Mitglied: 148121
Solution 148121 Apr 13, 2021 updated at 08:45:00 (UTC)
Goto Top
Mit c# VB.Net und Konsorten siehe
https://stackoverflow.com/questions/5468342/how-to-modify-my-app-exe-con ...
https://docs.microsoft.com/en-us/dotnet/api/system.configuration.configu ...

Das kannst bei AppConfigs du auch einfach mittels Powershell machen
$config = [System.Configuration.ConfigurationManager]::OpenExeConfiguration('D:\test.exe')  
$config.AppSettings.Settings['UserName'].Value = $env:USERNAME  
$config.Save()
Oder wenn du das in einer Batch einbauen willst, das geht selbstredend auch
@echo off
set "exepath=D:\datei.exe"  
powershell -EP Bypass -C "$config = [System.Configuration.ConfigurationManager]::OpenExeConfiguration('%exepath%');$config.AppSettings.Settings['UserName'].Value = $env:USERNAME;$config.Save()"  
In beiden Skripten einfach Pfad zur EXE der Config anpassen, fertig.

Thread dann bitte als gelöst markieren nicht vergessen.