[英]Where does Delphi get value the BDSCOMMONDIR from?
我的一个系统的 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.
我现在可以使用 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 版)在此键下存储了一个覆盖:
HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Environment Variables
所有三个键都存储常规 REG_SZ 名称/值对(其中名称为BDSCOMMONDIR
)。
我的猜测(我希望最终验证这一点)是由于向后兼容性,较新的 Delphi 版本具有类似的行为。
问题很老,但这里是未来读者的正确答案: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<版本号>\\环境变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.