ich versuche mit einer exe eine Umgebungsvariable zu setzen mit der Zielsetzung, dass diese (nur) in der Eingabeaufforderung gültig ist, in der ich auch die exe ausgeführe.
Mache ich es nur mit Batch
@echo off
set Test=123
echo %Test%
wird 123 ausgegeben und das ist gut so.Was ich möchte ist das hier:
@echo off
REM set Test=123
meine-exe-die-set-Test-macht.exe
echo %Test%
Hier bekomme ich es nicht hin, dass auch 123 ausgegeben wird.Das habe ich schon ausprobiert:
1.
Environment.SetEnvironmentVariable("Test", "123");
string ausgabe = System.Environment.GetEnvironmentVariable("Test");
Console.WriteLine(ausgabe);
Dann hätte ich auch gleich string ausgabe="123"; schreiben können und es hätte mir auch nichts genutzt.
2.
Environment.SetEnvironmentVariable("Test", "123", EnvironmentVariableTarget.User);
Außerdem steht die Variable so noch nicht in der Eingabeaufforderung zur Verfügung, in der sie gesetzt wurde, sondern erst in allen später geöffneten Eingabeaufforderung, wo sie aber nicht mehr benötigt wird.
3.
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/k set Test=123";
cmd.Start();
Außerdem möchte ich keine neu Eingabeaufforderung öffnen, sondern bei der bleiben, bei der ich bin.
4.
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.Arguments = "/c set Test=123";
cmd.Start();
Die aufrufende Eingabeaufforderung hat, wie bei 1., davon nichts.
Mein aktueller Workaround
Im Moment lasse ich mir von meiner exe eine Batch-Datei erzeugen, in der der gewünscht set-Befahl enthalten ist und rufe dann diese Batch per call auf und lösche diese Datei wieder.
Das sieht dann so aus:
@echo off
meine-exe-die-eine-setTest.cmd-erzeugt.exe
REM Der Inhalt von setTest.cmd ist: set Test=123
call setTest.cmd
del setTest.cmd
echo %Test%
Es ist allerdings nicht sonderlich elegant eine Variable über die Festplatte zu übergeben.Wozu das Ganze?
Der Wert, den ich der Umgebungsvariablen zuweisen möchte ist nicht statisch, sondern das Ergebnis einer Auswertung, die die exe ausführt.
Diese Auswertung von der Batch selbst erledigen zu lassen ist zu komplex.
Andersherum wäre es mir zu unflexibel, alles von der exe erledigen zu lassen und somit ohne Batch auszukommen.
Meine Fragen
Gibt es eine Möglichkeit eine Umgebungsvariable so setzen zu lassen, dass sie (nur) im gewünschten Kontext gültig ist?
Hat jemand einen alternativen Ansatz für eine Variabenübergabe von exe zu Batch?
Dazu noch eine Anmerkung: Es geht nicht nur um eine Variable, die übergeben werden soll, sondern um 42 Stück.
Gruß Frank