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 Registry Pfade (https://www.delphipraxis.net/215137-delphi-registry-pfade.html)

TurboMagic 15. Mai 2024 17:44

Delphi Registry Pfade
 
Hallo,

in einem Tool will ich alle installierten Delphi Versionen finden um gewisse
Pfade ermitteln zu können.

Für Delphi Installationen die unter dem aktuellen benutzer installiert wurden
finde ich das schon hiermit:

Delphi-Quellcode:
  Registry.RootKey := HKEY_CURRENT_USER;
  if Registry.OpenKey('SOFTWARE\Embarcadero\BDS', false) then
Und kann damit den BDSCatalogRepositoryAllUsers Eintrag auslesen.
Nur: wie funktioniert das für Isntallationen bei den der Installer "als Administrator
ausführen, d.h. unter einem anderen benutzerkonto installiert wurde oder bei Nutzung der
"Für alle" Option? Wo muss ich da suchen?

Uwe Raabe 15. Mai 2024 21:00

AW: Delphi Registry Pfade
 
Das sollte z.B. auf diese Art gehen:
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Embarcadero\BDS
Auf andere User - die können ja auch eigene Installationen haben, die der aktuelle User nicht hat - kannst du allerdings nur als Admin zugreifen.

Auch etwaige Registry-Zweige, die über den -r Parameter angelegt wurden (also nicht BDS), kannst du mit dem bestehenden Ansatz nicht erreichen.

himitsu 15. Mai 2024 21:05

AW: Delphi Registry Pfade
 
BDSCatalogRepositoryAllUsers ist für alle Nutzer gleich, also reicht es das einmal zu finden.
Nur BDSCatalogRepository weicht ab.


Es gibt immer den Zweig im CurrentUser.
Wenn die Delphi-IDE gestartet wird, dann kopiert sie sich den Zweig von LocalMachine ins CurrentUser.

Unter HKEY_USERS findet du alle User (aber natürlich hat ein normaler User nicht auf alles Zugriff)

Und im CurrentUser muß es nicht "BDS" heißen, falls man die IDE mit -R startet.


Das mit den Userverzeichnissen ist eh oftmals vollkommen schwachsinnig, bzüglich BDSCatalogRepository und BDSCatalogRepositoryAllUsers,
da z.B. das schrottige Update und auch einige global installierte GetIt-Packete sich im CurrentUser einnisten, obwohl sie global Dateien z.B. im Delphi-InstallationsVerzeichnis ändern,
aber GetIt sieht das dann nur, wenn es mit dem selben Nutzer (meist dem Admin) gestartet wurde ... eigentlich müsste es in LocalMachine/AllUsers rein, wenn es global installiert wird :wall:


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