Как настроить ISPP на основе переменных Inno Setup по умолчанию? - PullRequest
2 голосов
/ 18 февраля 2011

Я пытался:

#define CommonAppData {commonappdata}

, но это дает:

Ошибка компилятора

[ISPP] Выражение ожидается, но открывающая скобка ("{") найдено.

Как этого добиться с помощью Inno Setup PreProcessor?

Ответы [ 3 ]

3 голосов
/ 21 февраля 2011

#define - директива препроцессора inno setup, находящаяся на этапе предварительной компиляции. Он работает так же, как препроцессор C.

Определяя переменную препроцессора, мы заставляем компилятор видеть сценарий после разрешения определений ispp:

Inno Setup Preprocessor (ISPP) - это дополнение для компилятора Inno Setup Джордана Рассела. С технической точки зрения, это дополнительный слой между GUI (ваш скрипт Inno Setup) и компилятором, который перед передачей текста перехватывает и модифицирует его так, как это сказано с помощью специальных директив в тексте скрипта.

Тем не менее, я не могу найти источник в документации, и у меня нет времени копаться в исходном коде, но я почти уверен, что переменные настройки inno не доступны в течение этого времени перед компиляцией.

Если вы просто хотите, чтобы определенная переменная содержала строку {commonappdata}, используйте ее непосредственно в вашем источнике ... если вы хотите, чтобы определенная переменная имела значение времени выполнения commonappdata, кажется невозможным меня, потому что это значение определяется во время выполнения, поскольку его текущее значение зависит от целевого компьютера (версия Windows, язык и т. д.).

Если вы думаете об этом дважды, не имеет смысла пытаться использовать это значение во время предварительной компиляции или во время компиляции ... это всего лишь тот факт, который приводит к использованию констант inno, таких как {commonappdata}, {destdir} и тому подобное к существованию ... что вы можете выразить стандартным способом во время компиляции неизвестное, но значимое значение, которое будет известно и оценено во время выполнения.

3 голосов
/ 04 марта 2011

{commonappdata} нельзя развернуть во время компиляции, т. Е. Когда препроцессор работает, потому что он известен только во время выполнения: он идентифицирует общий каталог данных приложения на машине, где запускается скомпилированный установщик .

Возможно, если бы вы могли уточнить, как вы собираетесь использовать это определение, мы могли бы помочь. Если, например, вас действительно интересует не каталог данных общего приложения на целевой машине, а каталог на машине разработчика, то вы, вероятно, можете использовать это:

#define CommonAppData GetEnv("COMMONAPPDATA")

Однако, если вы намереваетесь использовать это определение для заполнения свойств Inno, которые сами по себе способны расширять константу во время выполнения, вам следует использовать это:

#define CommonAppData "{commonappdata}"

Надеюсь, это поможет.

1 голос
/ 18 февраля 2011

Вам, вероятно, понадобится вырваться из скобки. Что-то вроде:

#define CommonAppData {{commonappdata}
...