InnoSetup: получение AppName в секции [Code]
Я создаю установщик, используя InnoSetup и записывая некоторые пользовательские обработчики в разделе [Code]
. В одном из обработчиков я хотел бы получить значение AppName
(или, возможно, значение других параметров), определенное в разделе [Setup]
. Есть ли способ сделать это? Я просмотрел документацию , но я не нашел ничего, что позволило бы мне это сделать. Наши файлы InnoSetup фактически генерируются нашим процессом сборки, который объединяет фрагменты, которые являются общими для всех наших программ, и которые являются специфичными для программы, поэтому было бы неудобно определять константы в коде для каждой программы. Есть ли удобный способ сделать это?
Я ищу что-то вроде
MyString := ExpandConstant('{AppName}');
За исключением {AppName}
не определена константа. Есть ли способ запросить параметры, определенные в разделе [Setup]
?
Ответы
Ответ 1
Это константа времени сборки, а не значение времени установки. Таким образом, вы можете использовать надстройку Inno Setup Preprocessor для определения таких констант. (Вы можете легко установить его через QuickStart pack).
Определите константу:
#define AppName "Excellent Foo App"
Используйте константу в [Setup]
:
AppName={#AppName}
И в коде Pascal я не совсем уверен в синтаксисе, но что-то вроде:
MyString := {#AppName}
Обновление: Я понял, что один из моих сценариев использует {#emit SetupSetting("AppId")}
, что проще. Брайанское решение также обнаружило этот метод, и лучше.
Ответ 2
Вдохновленный Крейгом, я смотрел документацию по инсталляции Inno Setup Preprocessor (в ISTool, недоступной в Интернете, насколько я знаю), и наткнулся на функцию SetupSetting
в препроцессоре.
Его можно использовать так:
MyString := '{#SetupSetting("AppName")}';
И пока раздел [Setup]
появляется перед местом, где это используется (ISPP, кажется, только один проход), и включает определение для AppName
, это даст результаты, которые я хочу, без необходимости определите дополнительный макрос для каждой настройки, которую мы хотим извлечь.