InnoSetup: получение имени приложения в разделе [Code] - PullRequest
19 голосов
/ 18 декабря 2009

Я создаю установщик, используя InnoSetup , и пишу некоторые пользовательские обработчики в разделе [Code]. В одном из обработчиков я хотел бы иметь возможность получить значение AppName (или, возможно, значение других параметров), определенное в разделе [Setup]. Есть ли способ для меня, чтобы сделать это? Я просмотрел документацию , но я не нашел ничего, что позволило бы мне это сделать. Наши файлы InnoSetup фактически генерируются нашим процессом сборки, который объединяет фрагменты, которые являются общими для всех наших программ и которые специфичны для программы, поэтому было бы неудобно определять константы в коде для каждой программы. Есть ли удобный способ сделать это?

Я ищу что-то вроде

MyString := ExpandConstant('{AppName}');

За исключением того, что {AppName} не является определенной константой. Есть ли способ запросить параметры, определенные в разделе [Setup]?

Ответы [ 2 ]

21 голосов
/ 18 декабря 2009

Вдохновленный ответом Крейга, я просматривал документацию препроцессора Inno Setup (в ISTool, насколько я нашел, он недоступен в Интернете) и наткнулся на функцию SetupSetting в препроцессоре.

Может использоваться так:

MyString := '{#SetupSetting("AppName")}';

И до тех пор, пока раздел [Setup] появляется перед местом, где это используется (ISPP, кажется, только один проход), и включает определение для AppName, это даст желаемые результаты без необходимости определите дополнительный макрос для каждого параметра, который мы хотим извлечь.

15 голосов
/ 18 декабря 2009

Это постоянная времени сборки, а не время установки. Таким образом, вы можете использовать надстройку Inno Setup Preprocessor для определения таких констант. (Вы можете легко установить его через QuickStart pack ).

Определить постоянную:

#define AppName "Excellent Foo App"

Используйте константу в [Setup]:

AppName={#AppName}

А в коде на Паскале я не совсем уверен в синтаксисе, но что-то вроде:

MyString := {#AppName}

Обновление: Я понял, что один из моих скриптов использует {#emit SetupSetting("AppId")}, что проще. Решение Брайана также обнаружило этот метод, и лучше.

...