Delphi从哪里获取BDSCOMMONDIR的值?

4
我的一个系统安装的Delphi出了问题:它认为BDSCOMMONDIR指向C:\Windows\system32\9.0,而在正常运行的系统上,它指向C:\Users\Public\Documents\RAD Studio\9.0
我可能是企业安全疯狂的受害者,因为我发现失败的系统上没有人可以访问C:\Users\Public目录。
我的要求是将目录内容移动到开发人员可以写入的地方,然后全局(子目录C:\ProgramData)设置BDSCOMMONDIR
那么:Delphi从哪里获取BDSCOMMONDIR值?如何覆盖它?
主要原因是每次尝试编译/构建时都会遇到这个问题。
[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.

C:\ProgramData 绝对是错误的位置。根据 Windows 指南,它现在已经设置为适合用户共享文档的正确位置(C:\Users\Public\Documents\RAD Studio\9.0)。如果您的公司安全性阻止访问该文件夹,则需要新的公司安全性。;-) - Ken White
我知道这是正确的地方。但我也知道安全人员可以有多么不宽容。曾经有一次,我在一个特定客户那里花了8周时间处理繁琐的手续,最终只获得了一个受限制的开发者账户(甚至不是本地管理员账户),让我感到非常沮丧。 - Jeroen Wiert Pluimers
这是我们所有人都会遇到的一个头疼问题。虽然问题关键在于,如果你试图使用“ProgramData”,你将不仅需要应对企业安全问题,还要面对Windows自身的限制;据我所知,普通(非管理员)用户没有该文件夹树的写入权限,因此使用“ProgramData”可能会更麻烦。 - Ken White
奇怪的是:我关闭了所有应用程序,重新启动了Delphi,现在一切都很好。现在C:\Users\Public下有更多的目录(甚至来自其他应用程序)而且我有写入权限。可能是其中一个不错的文件夹重定向策略吧? - Jeroen Wiert Pluimers
1
我所知道的唯一可以找到BDSCOMMONDIR定义的地方是bin子文件夹下的rsvars.bat文件,但不确定IDE是否使用它。 - kludg
1
@Serg:请看下面发布的答案。rsvars.bat中的答案仅在使用MSBuild从命令行构建时才有用,并且只能通过“开始-> Embarcadero RAD Studio XE2-> RAD Studio命令提示符”进行使用。 - Ken White
3个回答

7

在注册表中没有将BDSCOMMONDIR作为环境变量,但是当我查看IDE时它仍然被分配了一个值。您知道您的建议是否是持久的吗? - Jeroen Wiert Pluimers
在我改变它的所有情况下,它都起作用了。我不能保证这个更改会100%地起作用。Embarcadero的人并没有公布BDSCOMMONDIR从哪里来。也许我在这方面是错的。如果是真的,我会删除这个答案。 - RBA
在我的XE2安装中,我在IDE的环境选项中有一个BDSCOMMONDIR覆盖,对我来说似乎工作得很好。 - Remy Lebeau
尽管我的问题自行解决了(你不喜欢这样吗),但你的选项似乎是唯一的解决方法。因此我接受了。 - Jeroen Wiert Pluimers
1
这里肯定有些麻烦的事情发生了。(IDE错误?)我见过这个错误发生的一个地方是一个带终端服务的Windows服务器,而且BDSCOMMONDIR出现了一些额外奇怪的IDE错误。 - Warren P

1
我现在可以访问一个使用Delphi 2007的系统,出现了类似症状,我使用RegAlyzer进行验证。
默认情况下,Delphi 2007使用环境变量的注册表中的SYSTEM设置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

它从注册表中的USER环境变量键中 永远 获取不到值:
HKEY_CURRENT_USER\Environment

Delphi 2007(即BDS版本5.0)将override存储在以下密钥下:
HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Environment Variables

所有三个键都存储常规的REG_SZ名称/值对(其中名称为BDSCOMMONDIR)。

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


1
问题比较老,但以下是正确答案以供未来读者参考: RAD Studio/Delphi不会在注册表中存储BDSCOMMONDIR(和其他文件夹)的位置,但您可以在\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_CURRENT_USER\Software\Embarcadero\BDS<版本号>\Environment Variables

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接