Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Umgebungsvariablen dauerhaft setzen (https://www.delphipraxis.net/85135-umgebungsvariablen-dauerhaft-setzen.html)

arbu man 26. Jan 2007 13:05


Umgebungsvariablen dauerhaft setzen
 
Hi,

Ich möchte gerne eine Umgebungsvariable dauerhaft mit einen Wert belegen, um damit meine Programme aus der shell heraus starten zu können. Bsp.: C:\>myapp.exe startet dann myapp.exe, die aber in einen anderen Verzeichnis liegt.
Ich habe es schon mit der Funktion "SetEnvironmentVariable" versucht allerdings scheint diese die Werte nicht dauerhaft zu verändern.

mfg, Björn

SubData 26. Jan 2007 13:13

Re: Umgebungsvariablen dauerhaft setzen
 
Dafür gibt es die globale Environment Variable PATH.

Systemeigenschaften => Erweitert => Umgebungsvariablen

arbu man 26. Jan 2007 13:22

Re: Umgebungsvariablen dauerhaft setzen
 
Und wie geht das mit Delphi ?

IngoD7 26. Jan 2007 13:54

Re: Umgebungsvariablen dauerhaft setzen
 
Wohl nur durch Eintragen in die Registry.

Google mal nach "Umgebungsvariablen Registry".

inherited 26. Jan 2007 13:55

Re: Umgebungsvariablen dauerhaft setzen
 
Werden die nicht in der autoexec.bat gesetzt?

arbu man 26. Jan 2007 19:10

Re: Umgebungsvariablen dauerhaft setzen
 
Zitat:

Zitat von IngoD7
Wohl nur durch Eintragen in die Registry.

Google mal nach "Umgebungsvariablen Registry".

Hab ich gemacht und den Schlüssel "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contr ol\Session Manager\Environment\" gefunden. Da kann ich jetzt Variablen bestimmen. Aber diese kann mich nur so aufrufen:

%myapp%

ich würde meine Anwendung lieber so aufrufen:

myapp

Wie mache ich das ?


Zitat:

Zitat von inherited
Werden die nicht in der autoexec.bat gesetzt?

Was ist das für eine Datei und wo finde ich diese ? Scheint nicht auf meiner Plattezu sein...
KA wie das damit gehen soll...

mfg, Björn

arbu man 26. Jan 2007 19:48

Re: Umgebungsvariablen dauerhaft setzen
 
Zitat:

Zitat von SubData
Dafür gibt es die globale Environment Variable PATH.

Systemeigenschaften => Erweitert => Umgebungsvariablen

Ich habe zwar jetzt das Path gefunden, aber ich sehe keine Möglichkeit es mit Delphi zu ändern, TRegistry weigert sich es zu lesen ('') und zu schreiben (ERegistryException) :(

Waldteufel 26. Jan 2007 19:49

Re: Umgebungsvariablen dauerhaft setzen
 
Hi Arbu Man.

Du musst einfach nur den Pfad deiner Anwendung (also den Ordner, in dem sie liegt) in die Umgebungsvariable PATH eintragen. Diese hat etwa folgenden Aufbau

Code:
Pfad1;Pfad2;Pfad3;P:\Fad\4;...
usw.

Du fügst einfach hinten ein Semikolon und deinen Pfad an und die Sache ist geritzt.

Zitat:

Zitat von arbu man
Was ist das für eine Datei und wo finde ich diese ? Scheint nicht auf meiner Plattezu sein...
KA wie das damit gehen soll...

Die AUTOEXEC.BAT war mal die Autorun-Startdatei für Dos. Alle Befehle darin wurden beim Systemstart automatisch ("auto") ausgeführt ("exec"). Die Datei gibt's unter NT und XP und ähnlichem nicht mehr - stattdessen gibt es AUTOEXEC.NT - die wird aber imho nur beim Öffnen von cmd.exe und so gestartet.

Gruß,
Waldteufel

arbu man 26. Jan 2007 20:04

Re: Umgebungsvariablen dauerhaft setzen
 
Hi Waldteufel,

dieSache ist nur die die TRegistry Klasse weigert sich beharlich die Zeichen Folge einzulesen oder gar zu ändern. Beim Einlesen gibt es einen Leerstring und beim Schreiben, ne ERegistryException. Ich vermutet es liegt vielleicht am Datentype: REG_EXPAND_SZ.

mfg, Björn

Klaus01 26. Jan 2007 20:27

Re: Umgebungsvariablen dauerhaft setzen
 
Mit diesem Code kannst Du Umgebungsvariablen setzen und das dauerhaft:

Delphi-Quellcode:
//********************************************************************************
{*********************************************}
{ Set Global Environment Function            }
{ Coder : Kingron,2002.8.6                    }
{ Bug Report : [email]Kingron@163.net[/email]               }
{ Test OK For Windows 2000 Advance Server    }
{ Parameter:                                 }
{ Name : environment variable name           }
{ Value: environment variable Value          }
{ Ex: SetGlobalEnvironment('MyVar','OK')     }
{*********************************************}

function SetGlobalEnvironment(const Name, Value: string;
  const User: Boolean = True): Boolean;
resourcestring
  REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
  REG_USER_LOCATION = 'Environment';
begin
  with TRegistry.Create do
    try
      if User then { User Environment Variable }
        Result := OpenKey(REG_USER_LOCATION, True)
      else { System Environment Variable }
      begin
        RootKey := HKEY_LOCAL_MACHINE;
        Result := OpenKey(REG_MACHINE_LOCATION, True);
      end;
      if Result then
      begin
        WriteString(Name, Value); { Write Registry for Global Environment }
        { Update Current Process Environment Variable }
        SetEnvironmentVariable(PChar(Name), PChar(Value));
        { Send Message To All Top Window for Refresh }
        SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
      end;
    finally
      Free;
    end;
end; { SetGlobalEnvironment }
Aber sinnvoller wäre es schon, wenn Du die Pfadvariable erweitern würdest.
Also voher den Pfad/Path auslesen, erweitern und zurückschreiben.

Grüße
Klaus

arbu man 26. Jan 2007 20:36

Re: Umgebungsvariablen dauerhaft setzen
 
Das würd ich ja gerne, nur:

Delphi-Quellcode:
const
  S_ENVIRONMENT = 'HKEY_LOCAL_MACHINE\SYSTEM\'+
                  'CurrentControlSet\Control\Session Manager\Environment\';

procedure AddExecutePath(aPath: string);
var
  Reg: TRegistry;
  Path: string;
  Size: integer;
  SS: TStringStream;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Reg.OpenKey(S_ENVIRONMENT, true);
    Path := Reg.ReadString('Path');
    writeln('Path: '+Path); // Path ist ''
    Path := Path + aPath + ';';
    Reg.WriteString('Path', Path); // Exception: Fehler beim setzen der Daten
    Reg.CloseKey;
  finally
    //FreeAndNil(Reg);
  end;
end;
Kann ich Path nicht weder lesen noch schreiben.

Chewie 26. Jan 2007 20:38

Re: Umgebungsvariablen dauerhaft setzen
 
Du brauchst Administratorrechte, um in HKEY_LOCAL_MACHINE was zu ändern.

Versuch das gleiche mal in HKEY_CURRENT_USER. Eventuell befinden sich die Variablen da aber an einer anderen Stelle, das weiß ich nicht.

marabu 26. Jan 2007 20:42

Re: Umgebungsvariablen dauerhaft setzen
 
Hallo Björn,

unter Windows arbeitet man eigentlich nicht mehr mit der PATH-Variable im global environment. Trage dein Programm in der Registry unter
Code:
 
[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\myapp.exe]
@="C:\\Programme\\Delphi-PRAXiS\\arbu man\\myapp.exe"
Path="C:\\Programme\\Delphi-PRAXiS\\arbu man\\System;C:\\Windows\\System32"
ein. Den Standardwert des Schlüssels setzt du auf den vollen Pfadnamen deiner Anwendung. Verwendet deine Anwendung DLLs, dann trägst du deren Speicherort(e) getrennt durch Semikolon in den Wert "Path" ein. Ohne Admin-Rechte kannst du das analog im Hive HKEY_CURRENT_USER machen.

Gute Nacht

arbu man 26. Jan 2007 21:12

Re: Umgebungsvariablen dauerhaft setzen
 
Danke, marabu jetzt kann ich die Programme wenigstens durch Ausführen starten :)

mfg, Björn


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz