简体   繁体   中英

Where does Delphi get value the BDSCOMMONDIR from?

One of my systems has a broken Delphi installation: it thinks BDSCOMMONDIR points to C:\\Windows\\system32\\9.0 whereas on a functioning system, it points to C:\\Users\\Public\\Documents\\RAD Studio\\9.0 .

I'm probably the victim of corporate security madness, as I found out nobody can access the C:\\Users\\Public directory on the failing system anyway.

What I want is to move the content of the directory to a place where the developers can write, then globally (a subdirectory C:\\ProgramData comes to mind) and globally set the BDSCOMMONDIR .

So: where does Delphi get the BDSCOMMONDIR value from?
How can I override it?

The major reason why it is holding me back is that I now get this on every compile/build I try:

[MakeDir Error] Unable to create directory "C:\Windows\system32\9.0\hpp\". Access to the path 'C:\Windows\system32\9.0\hpp\' is denied.
[MakeDir Error] Unable to create directory "C:\Windows\system32\9.0\Dcp". Access to the path 'C:\Windows\system32\9.0\Dcp' is denied.
[MakeDir Error] Unable to create directory "C:\Windows\system32\9.0\hpp". Access to the path 'C:\Windows\system32\9.0\hpp' is denied.

You can go to

Tools|Options|Environment Options|Environmental Variables

double click on

BDSCOMMONDIR

and set it to whatever you want.

Also get a look at Where are environment variables stored in registry?

I now had access to a system with Delphi 2007 showing similar symptoms for which I used RegAlyzer to verify.

By default, Delphi 2007 uses the SYSTEM setting of the environment variable from the registry:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

It never gets the value from the USER environment variable key in the registry:

HKEY_CURRENT_USER\Environment

An override is stored by Delphi 2007 (which is BDS version 5.0) under this key:

HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Environment Variables

All three keys store regular REG_SZ name/value pairs (where name is BDSCOMMONDIR ).

My guess (I hope to eventually verify this) is that newer Delphi versions have similar behaviour because of backward compatibility.

Question is rather old but here is the correct answer for future readers: RAD Studio/Delphi doesn't store the BDSCOMMONDIR (and others) in the registry but you can find it in a file named rsvars.bat, inside the \\bin folder.

Example extracted from my Delphi 10.3 Rio installation:

@SET BDS=C:\Delphi\Embarcadero\Studio\20.0
@SET BDSINCLUDE=C:\Delphi\Embarcadero\Studio\20.0\include
@SET BDSCOMMONDIR=C:\Users\Public\Documents\Embarcadero\Studio\20.0

unless you have manually overridden it through Environment Variables option. In that case, it will be under the registry key:

HKEY_CURRENT_USER\\Software\\Embarcadero\\BDS<VERSION NUMBER>\\Environment Variables

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM