我正在为我们的内部库做一些整洁的安装程序(而不是仅仅打开DPK并单击“安装”并稍后弄乱......)这使我必须了解如何获得各种库Delphi变量,如Known Packages,注册表RootDir值等。
我看到在Delphi中有许多变量你可以使用(例如在搜索路径中),例如$(BDS)等。当我查看我的机器环境变量时,我不会在系统中看到这些变量或当前用户。
我的问题是:
答案 0 :(得分:22)
1)它们只是Delphi为其自己的流程设置的环境变量,您可以使用安装在IDE中的设计包中的GetEnvironmentStrings检索它们;这是an example。
如果你的安装程序是一个单独的可执行文件,你仍然可以(或多或少地)猜测从哪里得到一些值:
BDS
:RootDir
值,例如HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\8.0\
BDSCOMMONDIR
:旧版本(Delphi 2007,我猜)这是一个全局环境变量,由Delphi安装程序设置。在以后的版本中,您可以在rsvars.bat
。其他一些可能是衍生出来的,例如:
BDSLIB
:$(BDS)\lib
BDSINCLUDE
:$(BDS)\include
用户定义的变量(在Delphi的“环境选项”对话框中定义)存储在Environment Variables
注册表子项中。
2)$(...)
符号恕我直言更好,因为它有明显的开始和结束分隔符,更容易使用搜索/替换操作,也更易读。
答案 1 :(得分:6)
我正在进行一些命令行构建自动化(因为我想要离开Final Builder),所以我不得不处理这些特殊变量。要调用命令行编译器,我们应该使用“开始”菜单中的“RAD Studio命令提示符”调用命令提示符,或者将“rsvars.bat”脚本包含在我们自己的脚本中。
rsvars.bat脚本如下所示:
@SET BDS=C:\Program Files (x86)\Embarcadero\RAD Studio\7.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN
正如您所注意到的那样,在那里设置了非常特殊的BDS变量,以及其他一些变量。 BDS路径与注册表中的BDS安装路径相对应,但我决定从rsvars.bat
脚本中读取它,希望它能更好地面向未来。所以我基本上将.bat
文件读成TStringList
并且我正在应用一个简单的RegEx来识别分配。
扩展那些$(Nam)
样式表达式的例程包括DELPHI
名称的特殊情况,以处理Delphi7:如果我看到了,我将其替换为IDE的安装路径。
答案 2 :(得分:6)
变量的$()表示法是MAKE使用的约定,Borland在切换到MSBuild之前用作构建工具。 (在D2007?)
答案 3 :(得分:1)
David认为这些变量特定于Delphi(和C ++ Builder),并且它们不能作为“普通”环境变量使用。
但是,可以在注册表中查找它们。关键是:HKCU\Software\<Borcadero>\BDS\<version>\Environment Variables
。
您添加的任何自定义“环境”变量也可以在此处找到。例如,我有一个$(MVC)变量指向可以找到所有组件('版本)的文件夹。
在工作中,我们使用注册表在脚本/应用程序组合中查找值,以将dprojs转换为使用命令行编译器的构建服务器的cfg文件。 (因为我们不在构建机器上使用IDE,所以我们已经手动将自定义Delphi环境变量添加到注册表中。)
更新
实际上,Environment Variables键用于用户定义的环境变量以及“标准”BDS环境变量的覆盖。任何$(BDS *)环境变量的默认值都无法在注册表中找到...
因此,当前的知识说,如果你想要了解$(BDS *)变量的值,你必须覆盖默认值并读取你从环境变量键中指定的值。
答案 4 :(得分:-1)
谢谢,我想我要补充一点,当我创建一个新的环境变量-(将在DCC_UnitSearchPath中用作$(VISEMS))时,我发现它已放入注册表中。
对于一个特定的示例,我在以下位置找到了它: 计算机\ HKEY_CURRENT_USER \软件\ Embarcadero \ BDS \ 17.0 \环境变量
需要更新上面的“可接受的答案”以反映注册表路径中存在版本号,因为在我的情况下,“可接受的答案”不正确(当它说:HKEY_CURRENT_USER \ SOFTWARE \ Embarcadero \ BDS \ 8.0 \) 因为“ BDS \ 8.0”上没有任何内容,因为我的计算机上尚未安装8.0。