Environment-Variable über die Laufzeit des Programms setzen

  • Hallo Zusammen,

    wie kann ich eine Environment-Variable über die Laufzeit des AutoIt-Programms setzen? Mit EnvSet kann ich zwar eine Variable setzen, die ist aber wieder am Ende meines Programmes verschwunden.

    Hat irgendjemand eine Idee?

    Besten Dank und weiterhin happy computing!
    skyteddy

  • Hai,
    Du könntest den Pfad direkt in der Registry anpassen:
    "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path" [W2K]

    Allerdings wird diese Änderung erst bei neuer Anmeldung(?) oder Reboot gelesen.

    Michael

  • Hallo Zusammen,

    habe etwas rumexperimentiert. Mit normalen AutoIt-Funktionen geht es anscheinend nicht. Ich habe gesucht und etwas gefunden, was ich verbessert habe. Hier der Code und auch kleine Beispiele, falls es jemand brauchen kann:

    Spoiler anzeigen
    [autoit]

    ; -- Beispiele --

    [/autoit] [autoit][/autoit] [autoit]

    ; Setzen der Variablen "MeineTestVar" als User-Variable
    _SetEnvironmentVar("MeineTestVar", "hello world", 1, 1) ; => Setzt nichts, da die Variable bisher nicht existiert
    _SetEnvironmentVar("MeineTestVar", "hello world", 0, 1) ; => Setzt die Variable
    _SetEnvironmentVar("MeineTestVar", "hello germany", 1, 1) ; => Setzt die Variable um, da sie jetzt existiert

    [/autoit] [autoit][/autoit] [autoit]

    ; U(m)Setzt der Prompt-Variable um (Default $P$G)
    _SetEnvironmentVar("PROMPT", "$d,$t$g") ; => Ändert den Prompt in der cmd

    [/autoit] [autoit][/autoit] [autoit]

    ; EnvUpdate ( )

    [/autoit] [autoit][/autoit] [autoit]

    Local $var = EnvGet("MeineTestVar")
    MsgBox(4096, "MeineTestVar:", $var) ; => Siehe Anmerkungen in der Funktion _SetEnvironmentVar

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetEnvironmentVar($Name, $Value, $SetOnlyIfAlreadyExists = 0, $UseUserEnvInsteadSystemEnv = 0)
    #cs
    -- Funktion --
    Setzt eine Variable im System- oder im User-Environment über die Laufzeit des Programms hinweg.
    Per Default wird nur dann die Variable angelegt, wenn sie bisher noch nicht vorhanden ist.
    Siehe auch Parameter.

    -- Idee und Ursprungssource --
    User MsCreatoR, http://www.autoitscript.com/forum/index.php?showtopic=46727

    -- Parameter --
    $Name:
    Name der Variablen

    $ Value:
    Wert der Variablen

    $SetOnlyIfAlreadyExists (Default 0)
    Wenn $SetOnlyIfAlreadyExists = 1, dann werden auch bestehende Variablen überschrieben.

    $UseUserEnvInsteadSystemEnv (Default 0)
    Wenn $UseUserEnvInsteadSystemEnv = 1, dann wird die Variable im User-Environment anstatt
    im System-Environment gesetzt

    -- Return-Values und Errors --
    Noch nicht wirklich durchdacht

    -- Testumgebung --
    Derzeit nur auf WinXP Professional mit AutoIt 3.2.4.9

    -- Anmerkung --
    Variablen werden erst richtig ausgelesen, wenn der Benutzer frisch aus- und wieder eingeloggt wird.
    Auch kann man über Systemeigenschaften -> Erweitert -> Umgebungsvariablen mit drücken auf "OK"
    die Variablen übernehmen. Allerdings muß trotzdem SCITE neu gestartet werden. EnvUpdate reicht nicht!

    -- Copyright --
    (C)skyteddy - Bitte verwendet den Code nach belieben! Verbesserungen oder Fehler nehme
    ich gerne per Email an [email='skydiver2000@gmx.de'][/email] entgegen
    #ce

    If $Name = "" Then Return SetError(1)
    ; If $Value = "" Then Return SetError(2)
    ; If $SetOnlyIfAlreadyExists <> 0 And $SetOnlyIfAlreadyExists <> 1 Then Return SetError(3)

    Local $SystemRegKey = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
    Local $UserRegKey = "HKEY_CURRENT_USER\Environment"

    [/autoit] [autoit][/autoit] [autoit]

    Local $RegKey = $SystemRegKey
    If $UseUserEnvInsteadSystemEnv = 1 Then $RegKey = $UserRegKey

    [/autoit] [autoit][/autoit] [autoit]

    If $SetOnlyIfAlreadyExists = 1 Then
    RegWrite($RegKey, $Name, "REG_SZ", $Value)
    Else
    If RegRead($RegKey, $Name) == "" Then RegWrite($RegKey, $Name, "REG_SZ", $Value)
    EndIf
    EndFunc ;==>_SetEnvironmentVar

    [/autoit]

    Happy computing
    skyteddy

  • Hello Mega,

    Zitat

    Original von Xenobiologist
    warum ?


    weil ich es brauche ;)

    Zitat

    Geht es denn mit set unter dos?


    Ne leider auch nicht, denn das aufzurufen wäre nicht weiter schwer gewesen. Hab aber ne Lösung gefunden.

    Dank Dir und weiterhin happy computing!
    skyteddy

  • Hallo Michael,

    Zitat

    Original von michael
    Du könntest den Pfad direkt in der Registry anpassen:
    "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path" [W2K]

    Allerdings wird diese Änderung erst bei neuer Anmeldung(?) oder Reboot gelesen.

    genau das ist der richtige Weg und auch Deine Anmerkung ist richtig und wichtig. Alternativ kann man auch auf "ok" im Menu bei Systemeigenschaften -> Erweitert -> Umgebungsvariablen drücken.

    Besten Dank und weiterhin happy computing!
    skyteddy