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-ID: 665657

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

Herbrich19
Lösung Herbrich19 12.04.2021 um 15:23:02 Uhr
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
148121
148121 12.04.2021, aktualisiert am 13.04.2021 um 10:34:38 Uhr
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.
Herbrich19
Herbrich19 12.04.2021 um 19:30:47 Uhr
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
Runfun
Runfun 13.04.2021 um 10:31:29 Uhr
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%"/>
148121
Lösung 148121 13.04.2021 aktualisiert um 10:45:00 Uhr
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.