Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Umgebungsvariablen unter Vista ohne Admin-Rechte (https://www.delphipraxis.net/132870-umgebungsvariablen-unter-vista-ohne-admin-rechte.html)

HPW 21. Apr 2009 08:30


Umgebungsvariablen unter Vista ohne Admin-Rechte
 
Bislang habe ich mir Umgebungsvariablen so geholt:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  Registry,
  Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1   : TEdit;
    Edit2   : TEdit;
    Button1 : TButton;
    Label1  : TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

Type
  tEnviromentOwner = (eoUser, eoSystem);

var
  Form1: TForm1;

Const
  cEnviromentOwnerRegPlace : Array [tEnviromentOwner] of Record
      Root: HKEY;
      Key: String
    End = (
      (Root: HKEY_CURRENT_USER;
       Key: 'Environment'),
      (Root: HKEY_LOCAL_MACHINE;
       Key: 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
    );


implementation

{$R *.dfm}

Function GetSystemWideEnvironmentVariable (aOwner: tEnviromentOwner; aName: String): String;
Var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  With Reg, cEnviromentOwnerRegPlace [aOwner] Do
    Try
      RootKey := Root;
      OpenKey (Key, False);
      Result := ReadString (aName);
    Finally
      Free;
    End;
end;

Function GetEnv(regarea, varname : STRING ): String;
VAR
   retstr : String;
BEGIN
    IF AnsiUpperCase(regarea) = 'USER' THEN
      retstr := GetSystemWideEnvironmentVariable (eoUser, varname)
    ELSE IF AnsiUpperCase(regarea) = 'SYSTEM' THEN
      retstr := GetSystemWideEnvironmentVariable (eoSystem, varname)
    ELSE
      retstr := '';
    Result := retstr;
END;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := GetEnv( Edit1.Text , Edit2.Text );
end;

end.
Als Standard-User unter Vista gibt dies nichts mehr zurück.
Das Test-Programm als Administrator gestartet liefert wie immer zurück.
Wie funktioniert das immer?

Grüsse,

DeddyH 21. Apr 2009 08:36

Re: Umgebungsvariablen unter Vista ohne Admin-Rechte
 
Wenn es unbedingt über die Registry laufen soll statt über ExpandEnvironmentStrings etc., versuch mal, das Registry-Objekt als Nur-lesend anzulegen.
Delphi-Quellcode:
Reg := TRegistry.Create(KEY_READ);

himitsu 21. Apr 2009 08:37

Re: Umgebungsvariablen unter Vista ohne Admin-Rechte
 
Du hast als "normaler" User halt nicht mehr überall so einfach Zugriff, vorallem nicht mit Schreibrechten.
[edit]
siehe dem schnelleren User

Reichen dir denn nicht die Variablen, welche du in deinem Programm-Kontext zur Verfügung hast?
> GetEnvironmentVariableW (MSDN-Library durchsuchenGetEnvironmentVariable) und Co.

Luckie 21. Apr 2009 09:03

Re: Umgebungsvariablen unter Vista ohne Admin-Rechte
 
Und so was kannst du noch lesen:
Delphi-Quellcode:
With Reg, cEnviromentOwnerRegPlace [aOwner] Do
Wenn ich so was sehe, dann tun mir die Augen weh.

HPW 21. Apr 2009 10:15

Re: Umgebungsvariablen unter Vista ohne Admin-Rechte
 
Danke für alle Antworten.

Zitat:

Reg := TRegistry.Create(KEY_READ);
Funktioniert!


Zitat:

GetEnvironmentVariable
Funktioniert!


Zitat:

Wenn ich so was sehe, dann tun mir die Augen weh.
Sicher, aber man hat irgendwann sich mal eine Funktion aus Forum/internet gesucht und die hat halt das gemacht was man wollte.
Und da hat man dann nicht weiter drüber nachgedacht.
Warum das Rad immer neu erfinden.

Ich werde mich dann aber wahrscheinlich von dem Lesen der Registry verabschieden und den API-Aufruf nutzen.

Danke nochmals.

;-)

Luckie 21. Apr 2009 10:31

Re: Umgebungsvariablen unter Vista ohne Admin-Rechte
 
Ich meinte eigentlich den with-Ausdruck in deinem Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 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