Umgebungsvariable setzen

Hallo,

Gibt es unter Win32 eine Möglichkeit, globale Umgebungsvariable
("Systemvariable") zu setzen oder zu ändern? Unter Win32 und
Win32API habe ich nichts gefunden.

Wahrscheinlich ginge es wohl auch durch Hacken in die
Registry, aber vielleicht gibt es eine einfachere Funktion?

Windows 2003 Server, Active State Perl 5.8.8 (Build 817).

Danke und schöne Grüße,

Ferry
--
Ferry Bolhar [ Fr, 21 September 2007 17:24 ] [ ID #1826542 ]

Re: Umgebungsvariable setzen

* Ferry Bolhar wrote in de.comp.lang.perl.misc:
>Gibt es unter Win32 eine Möglichkeit, globale Umgebungsvariable
>("Systemvariable") zu setzen oder zu ändern? Unter Win32 und
>Win32API habe ich nichts gefunden.

Wie setzen? Für den aktuellen Prozess? Dauerhaft? Systemweit oder für
den aktuellen Benutzer? Wie soll das System sich bei Konflikten ver-
halten, z.B. wenn die Variable an mehreren Orten gesetzt wird (z.B. in
der Registry und der autoexec.bat)?
--
Björn Höhrmann · mailto:bjoern [at] hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/
Bjoern Hoehrmann [ Fr, 21 September 2007 17:33 ] [ ID #1826543 ]

Re: Umgebungsvariable setzen

Björn Hoehrmann:

> Wie setzen? Für den aktuellen Prozess? Dauerhaft?

Ja, dauerhaft.

> Systemweit oder für den aktuellen Benutzer?

Systemweit. Ich habe ja von _System_variablen
geschrieben (das andere wären _Benutzer_variablen).

> Wie soll das System sich bei Konflikten ver-
> halten, z.B. wenn die Variable an mehreren Orten gesetzt wird (z.B. in
> der Registry und der autoexec.bat)?

Der Fall wird nicht eintreten - die Variable soll nur einmal
bei Ausführen eines Skripts gesetzt werden. Danach bleibt
sie - auch über Neustarts hinweg - auf dem Wert, bis sie
- wiederum über das Skript - auf einen anderen Wert
gesetzt wird.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Ferry Bolhar [ Mo, 24 September 2007 10:57 ] [ ID #1828313 ]

Re: Umgebungsvariable setzen

Ferry Bolhar schrieb:
> Gibt es unter Win32 eine Möglichkeit, globale Umgebungsvariable
> ("Systemvariable") zu setzen oder zu ändern? Unter Win32 und
> Win32API habe ich nichts gefunden.
>
> Wahrscheinlich ginge es wohl auch durch Hacken in die
> Registry, aber vielleicht gibt es eine einfachere Funktion?

Nein. Der von M$ propagierte Weg ist das Eintragen in
HKLM\System\CurrentControlSet\Control\Session Manager\Environment
und das Abfeuern von WM_SETTINGCHANGE.

-Christian
Christian Winter [ Mo, 24 September 2007 11:40 ] [ ID #1828314 ]

Re: Umgebungsvariable setzen

Christian Winter:

> Nein. Der von M$ propagierte Weg ist das Eintragen in
> HKLM\System\CurrentControlSet\Control\Session Manager\Environment

OK, danke. Hat vielleicht jemand Beispielcode zum Modifizieren
von Registry-Einträgen?

> und das Abfeuern von WM_SETTINGCHANGE.

Wie "feuere" ich von Perl aus ab?

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Ferry Bolhar [ Mo, 24 September 2007 18:57 ] [ ID #1828315 ]

Re: Umgebungsvariable setzen

Ferry Bolhar schrieb:
> Christian Winter:
>
>> Nein. Der von M$ propagierte Weg ist das Eintragen in
>> HKLM\System\CurrentControlSet\Control\Session Manager\Environment
>
> OK, danke. Hat vielleicht jemand Beispielcode zum Modifizieren
> von Registry-Einträgen?
>
>> und das Abfeuern von WM_SETTINGCHANGE.
>
> Wie "feuere" ich von Perl aus ab?

Hm, dokumentiert ist, wenn ich nicht irre, der Weg über
SendMessageTimeout, ansonsten nimm einfach SendMessage mit
HWND_BROADCAST. Habe eben kurz mit google verifizieren wollen - und was
finde ich an erster Stelle? Einen Link auf das CPAN!

Also, vielleicht möchtest du Win32::Env verwenden?

Ich fand http://dn.codegear.com/article/28254 sehr hilfreich (ist
allerdings in Delphi, sollte sich aber leicht übersetzen lassen)

Wolf
Wolf Behrenhoff [ Mo, 24 September 2007 20:17 ] [ ID #1828316 ]

Re: Umgebungsvariable setzen

Wolf Behrenhoff:

> Hm, dokumentiert ist, wenn ich nicht irre, der Weg über
> SendMessageTimeout, ansonsten nimm einfach SendMessage mit
> HWND_BROADCAST. Habe eben kurz mit google verifizieren wollen - und was
> finde ich an erster Stelle? Einen Link auf das CPAN!
>
> Also, vielleicht möchtest du Win32::Env verwenden?

Genau das ist es. Vielen Dank! Besonders die Funktion
BroadcastEnv() entledigt mich der Verpflichtung, mich mit
SendMessageTimeout herumschlagen zu müssen. ;-)

Ich versteh' nur nicht, wieso ich es auf

http://search.cpan.org

nicht gefunden habe. Wahrscheinlich habe ich falsch
gesucht?

> Ich fand http://dn.codegear.com/article/28254 sehr hilfreich (ist
> allerdings in Delphi, sollte sich aber leicht übersetzen lassen)

Ja, ist interessant. Aber wie gesagt, mit Win32::Env
wird auch das abgedeckt.

Nochmals danke & LG,

Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Ferry Bolhar [ Di, 25 September 2007 12:35 ] [ ID #1829118 ]

Re: Umgebungsvariable setzen

Hallo Ferry,

Ferry Bolhar schrieb:
> OK, danke. Hat vielleicht jemand Beispielcode zum Modifizieren
> von Registry-Einträgen?

Win32API::Registry

Gruß,
Peter
Peter Arnhold [ Di, 25 September 2007 08:56 ] [ ID #1830035 ]
Perl » de.comp.lang.perl.misc » Umgebungsvariable setzen

Vorheriges Thema: de.
Nächstes Thema: B::Lint Merkwürdiger Fehler und Frage