Как оцениваются Delphi «переменные среды», такие как $ (BDS)? - PullRequest
14 голосов
/ 29 июля 2011

Я делаю несколько аккуратных инсталляторов для наших внутренних библиотек (вместо того, чтобы просто открывать DPK и нажимать «установить», а потом попадаю в беспорядок ...), и это заставило меня понять, как добраться до различныхПеременные Delphi, такие как Известные пакеты , значение реестра RootDir и т. Д.

Я вижу, что в Delphi есть ряд переменных, которые вы можете использовать (например, в пути поиска), например:$ (BDS) и т. Д. Когда я просматриваю переменные окружения моего компьютера, я не вижу их ни в системе, ни в текущем пользователе.

Мои вопросы:

  1. Делфи делает что-то внутреннее для расширения $ (BDS) и т. Д.?Или я могу каким-то образом использовать их внешне (например, поиск в реестре).
  2. Почему в пути поиска используется обозначение $ (xxxx), а не% xxxx%, как в переменной envirnment?Спасибо

Ответы [ 4 ]

22 голосов
/ 29 июля 2011

1) Это просто переменные среды, которые Delphi устанавливает для своего собственного процесса, и вы можете получить их с помощью GetEnvironmentStrings из пакета разработки, установленного в IDE; вот пример .

Если ваш установщик является отдельным исполняемым файлом, вы все еще можете (более или менее надежно) угадать, где взять некоторые значения:

  • BDS: RootDir значение в реестре, например, HKEY_CURRENT_USER\SOFTWARE\Embarcadero\BDS\8.0\
  • BDSCOMMONDIR: в более старых версиях (я думаю, Delphi 2007) это была глобальная переменная среды, устанавливаемая установщиком Delphi. В более поздних версиях вы можете найти его в rsvars.bat.

Некоторые другие, вероятно, могут быть получены, например ::1010 *

  • BDSLIB: $(BDS)\lib
  • BDSINCLUDE: $(BDS)\include

Пользовательские переменные (определенные в диалоге параметров среды Delphi) хранятся в подразделе реестра Environment Variables.

2) Нотация $(...) ИМХО просто лучше, потому что она имеет четкие открывающие и закрывающие разделители, с ними легче работать для операций поиска / замены, а также более читабельна.

6 голосов
/ 29 июля 2011

Нотация $ () для переменных является соглашением, используемым MAKE, которое Borland использовал в качестве инструмента сборки перед переходом на MSBuild. (в D2007?)

6 голосов
/ 29 июля 2011

Я немного работаю над автоматизацией сборки командной строки (потому что хочу отойти от 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.

1 голос
/ 29 июля 2011

Дэвид прав, что эти переменные специфичны для Delphi (и C ++ Builder), и они не доступны как «нормальные» переменные среды.

Однако их можно посмотреть в реестре. Ключ: HKCU\Software\<Borcadero>\BDS\<version>\Environment Variables.

Любые добавленные вами переменные окружения также можно найти здесь. Например, у меня есть переменная $ (MVC), указывающая на папку, в которой можно найти все мои компоненты (версии).

На работе мы используем реестр для поиска значений в комбинации сценарий / приложение для преобразования dprojs в файлы cfg для нашего сервера сборки, который использует компилятор командной строки. (Поскольку мы не используем IDE на сборочной машине, мы добавили наши переменные среды Delphi в реестр вручную).

Обновление

На самом деле, ключ Переменные среды используется для пользовательских переменных среды и для переопределений «стандартных» переменных среды BDS. Значения по умолчанию для любой переменной среды $ (BDS *) в реестре нигде не найдено ...

Итак, современные знания говорят, что если вы хотите получить значения переменных $ (BDS *), вам придется переопределить значения по умолчанию и прочитать значения, указанные вами в ключе переменных среды.

...