Problematik mit Umgebungsvariablen
-
Was ist "ProgEnv"?
Wenn du schon C# Programmierst, nimm die "Environment" Klasse.
Siehe dazu nochmal mein Posting zuvor und die MSDN Links die ich dort gesetzt habe.
-
ProgEnv ist ein Objekt der Klasse Programm Environment, wo die Umgebungsvariablen für bestimmte Programme festgelegt sind.
Die Environment Klasse benutze ich ja, schließlich erstelle ich Objekte von bereits vorhanden Environmentklassen oder verstehe ich das falsch?
Die Links muss ich sagen, habe ich mir durchgelesen, sagen mir aber nichts, da alles irgendwie ganz anders aussieht als bei mir.
-
benutzer_1234 schrieb:
ProgEnv ist ein Objekt der Klasse Programm Environment, wo die Umgebungsvariablen für bestimmte Programme festgelegt sind.
Hä? Zeig mal.
Die Klasse Environment (http://msdn.microsoft.com/de-de/library/system.environment.aspx) ist Statisch, d.h. du kannst von dieser gar keine Instanz erstellen.
Du scheint irgendwas anderes zu verwenden.In http://msdn.microsoft.com/library/40df59yb(v=VS.100).aspx gibts ein vollständiges Beispiel gibt wo es verwendet wurde.
Das ganze ist doch Kindergarten.
-
OK, ich glaube ich habe mich geirrt;)
Habe es jetzt weiter versucht und bekomme zuindest die Variablen, bei den Values scheitert es immernoch:switch (comboBoxBereich.Text) { case "Global": aktenv = new GlobalEnv(); aktGlobal = true; break; case "Benutzer": aktenv = new GlobalEnv(); aktGlobal = false; break; //------------------------------------------------ case "Projekt": aktenv = new ProjEnv(comboBoxProjekt.Text); aktGlobal = true; break; case "Projekt/Benutzer": aktenv = new ProjEnv(comboBoxProjekt.Text); aktGlobal = false; break; //------------------------------------------------ case "Firma": aktenv = new FirmEnv(comboBoxProjekt.Text, comboBoxFirma.Text); aktGlobal = true; break; case "Firma/Benutzer": aktenv = new FirmEnv(comboBoxProjekt.Text, comboBoxFirma.Text); aktGlobal = false; break; //------------------------------------------------ case "Programm": aktenv = new ProgEnv(comboBoxProjekt.Text, comboBoxFirma.Text, comboBoxProgramm.Text); aktGlobal = true; break; case "Programm/Benutzer": aktenv = new ProgEnv(comboBoxProjekt.Text, comboBoxFirma.Text, comboBoxProgramm.Text); aktGlobal = false; break; } FillEnv(); } private void FillEnv() { if (aktGlobal) { foreach (string var in aktenv.EnumGlobalVars()) { aktenv.GetGlobalEnv(var); listBox1.Items.Add(var); } } else { foreach (string var in aktenv.EnumUserVars()) { aktenv.GetUserEnv(var); listBox1.Items.Add(var); } } }
Das GetGLobalEnv/GetUserEnv verweist auf die folgende Methode, die ja auch die Werte zurückgeben sollte, aber ich weiß immernoch nicht, wie ich die bekomme:
virtual public string GetGlobalEnv(string Var) { return GetRegistryVariable(null, RegKeyGlobal, Var); }
-
Du hast scheinbar nicht mal versucht zu verstehen was ich schrieb und was die MSDN sagt
Vor allem wo es in der MSDN bereits vollständig und ausführlich Dokumentiert wurde. -> Versucht mal mit mitdenken, selbst ausprobieren scheint dir nicht zu liegen.=> Scheiß auf das "GetRegistryVariable" und auch auf das "GlobalEnv". Den ganzen Quatsch brauchst du nicht wenn du doch nur die Umgebungsvariablen auslesen willst.
Mach einfach das was du auf der MSDN Seite siehst.1. Nimm die Environment Klasse die da ist. Da ist schon alles fix und fertig von Microsoft aus implementiert.
2. Ruft in der Environment Klasse die Methode GetEnvironmentVariables auf um deine Variablen zu bekommen. Wie auf der MSDN beschrieben.Hier mal Code für Denkunfähige:
public static IEnumerable<string> GetGlobalVariables() { return GetVariables(EnvironmentVariableTarget.Machine); } public static IEnumerable<string> GetUserVariables() { return GetVariables(EnvironmentVariableTarget.User); } public static IEnumerable<string> GetProgramVariables() { return GetVariables(EnvironmentVariableTarget.Process); } private static IEnumerable<string> GetVariables(EnvironmentVariableTarget kind) { return (from DictionaryEntry variable in Environment.GetEnvironmentVariables(kind) select string.Format("{0}: {1}", variable.Key, variable.Value)); }
-
Jetzt verstehe ich garnichts mehr. Ich habe das im MSDN durchgelesen und versucht nachzuvollziehen und dahingehend einiges programmiert. Mein Ausbilder hat sich das angeguckt und gesagt, dass ich das aber so machen soll und das, was ich gepostet habe mit Ausnahme von aktenv.GetGlobalEnv(Var);
hat er alles dann so gemacht, wie ich zuvor gepostet hatte und meinte, dass ich das so machen soll und jetzt bin ich der denkunfähige, weil der eine sagt ich soll das so machen und der andere meint, dass das scheiße ist, was ich gemacht habe, obwohl ich es auf deine Art versucht habe...
-
Und wieso überhaupt soll ich das
public static IEnumerable<string> GetGlobalVariables() { return GetVariables(EnvironmentVariableTarget.Machine); }
verwenden, wenn es in der bereits existierenden Klasse schon enthalten ist, von der ich ein Objekt anlege? Das ist ja dann doppelt.
-
Alter, du brauchst doch gar kein Objekt anlegen, ich habe schon gesagt das die Methoden die du braucht Statisch im .Net vorhanden sind.
Rufs einfach auf und fertig.-> Ich klink mich aus, wenn ich hier dein Zeug noch weiter lesen muss mach es mich nur Aggressiv.
-
OK, kann ich auch irgendwo verstehen
Ich danke dir trotzdem für die Mühe, die du dir gemacht hast und es tut mir Leid, dass ich dich zur Weißglut getrieben habe. Ich wollte nur, dass du auch verstehst, dass es für mich sehr verwirrend ist, wenn mein Chef sagt, ich soll es so machen und du mir sagst, dass ich das garnicht machen muss.
-
Ausbilder oder Chef?
Wenn Chef warum sagt der wie du etwas entwickeln sollst?
Wenn Ausbilder, warum hilft er dir nicht genauer?Also mal konkret:
Du willst System variablen auslesen, sei es von der Maschine, Benutzer oder Programm.
Dafür stellt das .NET eine Klasse bereit, die "Environment".
Darin gibt es eine Statische Methode "GetEnvironmentVariables".
Je nachdem welche Art von Variablen man auslesen möchte, ruft man das "GetEnvironmentVariables" mit der entsprechenden Information auf.Hier mal Beispiele:
Aufgabe:
Gib mir alle globalen Systemvariablen.
Lösung:return Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
Aufgabe:
Gib mir alle Variablen des aktuellen Benutzers.
Lösung:return Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User);
Aufgabe:
Gib mir alle Variablen für den Aktuellen Prozess.
Lösung:return Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);
Aufgabe:
Lies alle globalen System variablen aus und zeige dessen Name und Werte in der Console.
Lösung:public void Do() { var variables = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine); // Liest alle variablen aus foreach (DictionaryEntry variable in variables) // Durchläuft alle variablen Console.WriteLine(string.Format("{0}: {1}", variable.Key, variable.Value)); // Zeigt an "Name: Wert" }