Umgebungsvariable setzen

Umgebungsvariable setzen

am 21.09.2007 17:24:05 von Ferry Bolhar

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
--

Re: Umgebungsvariable setzen

am 21.09.2007 17:33:18 von Bjoern Hoehrmann

* 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@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/

Re: Umgebungsvariable setzen

am 24.09.2007 10:57:59 von Ferry Bolhar

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@adv.magwien.gv.at

Re: Umgebungsvariable setzen

am 24.09.2007 11:40:06 von Christian Winter

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

Re: Umgebungsvariable setzen

am 24.09.2007 18:57:04 von Ferry Bolhar

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@adv.magwien.gv.at

Re: Umgebungsvariable setzen

am 24.09.2007 20:17:48 von Wolf Behrenhoff

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

Re: Umgebungsvariable setzen

am 25.09.2007 08:56:32 von Peter Arnhold

Hallo Ferry,

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

Win32API::Registry

Gruß,
Peter

Re: Umgebungsvariable setzen

am 25.09.2007 12:35:23 von Ferry Bolhar

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@adv.magwien.gv.at