Delphi从何处获得BDSCOMMONDIR的值?

Delphi从何处获得BDSCOMMONDIR的值?,delphi,delphi-xe2,Delphi,Delphi Xe2,我的一个系统有一个损坏的Delphi安装:它认为bdscommodir指向C:\Windows\system32\9.0,而在一个正常运行的系统上,它指向C:\Users\Public\Documents\RAD Studio\9.0 我可能是公司安全狂热的受害者,因为我发现,无论如何,没有人能够访问故障系统上的C:\Users\Public目录 我想要的是将目录的内容移动到开发人员可以编写的地方,然后全局地(想到一个子目录C:\ProgramData)并全局地设置bdsconddir 那么:D

我的一个系统有一个损坏的Delphi安装:它认为
bdscommodir
指向
C:\Windows\system32\9.0
,而在一个正常运行的系统上,它指向
C:\Users\Public\Documents\RAD Studio\9.0

我可能是公司安全狂热的受害者,因为我发现,无论如何,没有人能够访问故障系统上的
C:\Users\Public
目录

我想要的是将目录的内容移动到开发人员可以编写的地方,然后全局地(想到一个子目录
C:\ProgramData
)并全局地设置
bdsconddir

那么:Delphi从哪里获得
bdscommodir
值呢?
我怎样才能覆盖它

它阻碍我前进的主要原因是,我现在在尝试的每一次编译/构建中都会遇到这种情况:

[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.
你可以去

工具|选项|环境选项|环境变量

双击

BDSCOMMONDIR

把它设置成你想要的


还可以查看一下

我现在可以使用Delphi 2007访问一个系统,该系统显示了我用来验证的类似症状

默认情况下,Delphi 2007使用注册表中环境变量的
SYSTEM
设置:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Environment
它从不从注册表中的
用户
环境变量项获取值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
HKEY_CURRENT_USER\Environment
Delphi 2007(即BDS 5.0版)在此键下存储覆盖:

HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Environment Variables
所有三个键都存储常规的REG_SZ名称/值对(其中名称为
bdscommodir


我的猜测(我希望最终能证实这一点)是,由于向后兼容,较新的Delphi版本也有类似的行为。

这个问题已经很老了,但下面是给未来读者的正确答案: RAD Studio/Delphi不在注册表中存储BDSComonDir(和其他文件),但您可以在\bin文件夹中名为rsvars.bat的文件中找到它

从我的Delphi 10.3 Rio安装中提取的示例:

@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
除非您已通过环境变量选项手动覆盖它。在这种情况下,它将位于注册表项下:


HKEY\U CURRENT\U USER\Software\EMBACADERO\BDS\Environment Variables

bdscommodir
不是注册表中的环境变量,当我在IDE中查看时,它仍然被分配了一个值。你知道你的建议是否持久吗?在所有我改变它的情况下,它都起作用了。我不能向你保证这一改变将100%奏效。Embarcadero的人还没有出版《来自何处》这本书。也许我错了。如果这是真的,我将删除答案。在我的XE2安装中,我在IDE的环境选项中有一个BDSComonDir覆盖,对我来说似乎可以。即使我的问题自己解决了(你不喜欢吗),你的选项似乎是唯一的解决办法。因此被接受了。这里肯定有一些毛茸茸的坏处。(IDE Bug?)我在一个地方看到了这个Bug,那是一个带有终端服务的Windows服务器,有一些特别奇怪的IDE Bug,BDSCOMMONDIR变得异常异常。
C:\ProgramData
绝对是错误的地方。根据Windows指南,它现在被设置为用户之间共享文档的正确位置(“C:\users\Public\documents\RAD Studio\9.0”)。如果您的公司安全性阻止访问该文件夹,则需要新的公司安全性。;-)我知道这是个合适的地方。但我也知道安全人员是多么不宽容。有一次,我在经历了8周的局务管理之后,为了在一个特定的客户处获得一个有限的开发人员帐户(甚至不是本地管理员帐户),我放弃了。我想,这是我们所有人都感到头疼的问题之一。不过,关键是,您在尝试使用
ProgramData
时会遇到更多的麻烦,因为您不仅要与公司安全作斗争,还要与Windows本身作斗争;很好,普通(非管理员)用户没有对该文件夹树的写访问权限。我所知道的唯一可以找到
bdscommodir
定义的地方是
rsvars.bat
子文件夹中的
file,尽管不确定IDE是否使用它。@Serg:查看下面发布的答案。
rsvars.bat
中的一个仅由
Start->Embarcadero RAD Studio XE2->RAD Studio命令提示符使用,该命令提示符仅在使用
MSBuild
从命令行生成时有用。