Wie kann eine Anwendung die Umgebungsvariable von einer anderen Anwendung eingestellt zugreifen?

StackOverflow https://stackoverflow.com/questions/1013383

Frage

In diesem Fall ist die Anwendung, die die Umgebungsvariable setzt ausgeführt in / aus der Anwendung, die die env.var zugreifen muss. Die Main () Rückgabewerte (C # -Programmierhandbuch) Msdn Artikel beschreibt seine Verwendung in einer Batch-Datei. Wenn ich das gleiche versuchen, alles ist in Ordnung; aber was erforderlich ist, ist nicht aus einer Batch-Skript auszuführen, sondern aus einer Anwendung heraus.

Process.Start("app","args"); // app sets the env.var.
string envVar = System.Environment.GetEnvironmentVariable("ERRORLEVEL");

war offensichtlich nicht erfolgreich. Process.Start machte die „App“ Arbeit in einer völlig anderen Umgebung, glaube ich. Mit anderen Worten, ich brauche „app“ in der gleichen Umgebung wie die Aufrufer Anwendung, um die Umgebungsvariable zu erreichen setzt.

lief
War es hilfreich?

Lösung

Wenn Sie nur versuchen, das Umgebung des Kindes von dem Elternteil zu setzen:

var p = new Process();
p.StartInfo.EnvironmentVariables["TEST_ENV"] = "From parent";
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = @"C:\src\bin\Debug\ChildProc.exe";
p.Start();

Wenn Sie nicht möchten, dass das Kind den Eltern Prozessumgebung erben:

var psi = new ProcessStartInfo();
psi.EnvironmentVariables["TEST_ENV"] = "From parent";
psi.UseShellExecute = false;
psi.FileName = @"C:\src\bin\Debug\ChildProc.exe";
Process.Start(psi);

Andere Tipps

Die Umgebungsvariablen werden an untergeordneten Prozesse geerbt, aber jedes Kind erhält eine Kopie -., Wenn Sie die Eltern-Umgebung später ändern, das nicht in dem Kind widerspiegelt

Dies ist aus Sicherheitsgründen: Wenn die Variablen geteilt wurden, Prozesse in jedem der anderen Speicher sehen könnten, die alle Arten von Problemen verursachen würde

.

So ist die Lösung ist, um die Variable zu setzen, bevor Sie den neuen Prozess zu starten.

Wenn Sie mit einem bestehenden Kind-Prozess kommunizieren müssen, verwenden Sie eine Rohrleitung.

Jede Anwendung läuft mit einem eigenen Kopie der Umgebung so ein Kind-Prozess kann die Umgebung der Eltern nicht beeinflussen. Dies gilt die ganzen Weg hinunter zu Createprocess, wo die Umwelt eine Eingabe- / optionaler Parameter ist - d. H Einbahn

Es gibt viele IPC-Mechanismen Sie von Named Pipes zu Sockets gemeinsam genutzten Speicher für Dateien zur Verfügung haben ... die Liste geht weiter.

Aber der Verdächtige, die Dateien, die für Sie am einfachsten sein werden.

Sie könnten der Kind-Prozess eine Datei erstellen, die die Namen / Wert-Paare enthält, die Sie, die dann Gebrauch geladen werden und könnte die aufrufende Anwendung soll. Das Format könnte etwas Grund wie:

key = value key2 = Wert2

ein wenig komplexe (aber vielleicht einfacher zu arbeiten) wie XML ... oder jedes benutzerdefiniertes Format, das Sie mögen.

Der Befehl muss innerhalb der Umgebung des aktuellen Prozesses ausgeführt in werden. Normalerweise wird bash alle Prozesse ausführen, wie ein Kind Prozess, der eine schreibgeschützte Kopie der Umgebung des Mutter gegeben und einen neuen Eintrag erstellt, wenn eine Variable geändert wird.

Punkt (.) Ist ein Befehl, der nicht mit der Spezifikation des aktuellen Verzeichnisses verwechselt werden soll. Der Punkt Befehl bewirkt, dass der folgende Befehl innerhalb der Umgebung der Mutter ausgeführt werden. Auf diese Weise sind die Umgebungsvariablen des Verfahrens werden die Umgebungsvariablen des anrufenden Prozess.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top