Подтвердить что ты не робот

Как оцениваются переменные среды Delphi, такие как $(BDS)?

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

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

Мои вопросы:

  • Делает ли Delphi что-то внутреннее, чтобы сам расширять $(BDS)? Или я могу использовать их внешне каким-то образом (например, искал в реестре).
  • Почему обозначение $(xxxx) в пути поиска, а не% xxxx%, как и переменная envirnment? Благодаря
4b9b3361

Ответ 1

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

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

  • 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) Обозначение $(...) является IMHO просто лучше, потому что оно имеет различные разделители открытия и закрытия, с ним легче работать для операций поиска и замены, а также более читаемым.

Ответ 2

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

Ответ 3

Я работаю над некоторой автоматизацией построения командной строки (потому что я хочу отойти от Final Builder), поэтому мне пришлось иметь дело с этими специальными переменными. Чтобы вызвать компилятор командной строки, мы должны либо вызвать командную строку, используя "Командная строка RAD Studio" из меню "Пуск", либо включить "rsvars.bat" script в наши собственные скрипты.

Что rsvars.bat script выглядит следующим образом:

@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 script, надеясь, что он будет более надежным в будущем. Поэтому я по существу читаю файл .bat в TStringList, и я применяю простой RegEx для идентификации назначений.

Моя подпрограмма, которая расширяет эти выражения стиля $(Nam), включает специальный случай для имени DELPHI для обработки Delphi7: если я вижу это, я заменяю его на путь установки среды IDE.

Ответ 4

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

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

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

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

Update

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

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