2009-12-18 18 views
17

Estoy creando un instalador usando InnoSetup, y escribiendo algunos manejadores personalizados en una sección [Code]. En uno de los controladores, me gustaría poder recuperar el valor AppName (o, potencialmente, el valor de otros parámetros) definido en la sección [Setup]. ¿Hay alguna manera de hacer esto? Miré el documentation, pero no encontré nada que me permitiera hacer esto. Nuestros archivos InnoSetup en realidad son generados por nuestro proceso de compilación, que combina fragmentos que son comunes entre todos nuestros programas y que son específicos del programa, por lo que sería inconveniente tener que definir constantes en el código para cada programa. ¿Hay alguna forma conveniente de hacer esto?InnoSetup: Obtener AppName en la sección [Código]

Busco algo así como

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

Excepto {AppName} no es una constante definida. ¿Hay alguna forma de consultar los parámetros definidos en la sección [Setup]?

Respuesta

13

Es una constante de tiempo de compilación, no un valor de tiempo de instalación. Entonces puede usar el complemento Inno Setup Preprocessor para definir tales constantes. (Puede instalarlo fácilmente a través del QuickStart pack).

Definir la constante:

#define AppName "Excellent Foo App" 

Utilizar la constante en [Setup]:

AppName={#AppName} 

y en el código Pascal, no estoy totalmente seguro de la sintaxis, sino algo así como:

MyString := {#AppName} 

Actualización: Realicé una de mis scripts usan {#emit SetupSetting("AppId")}, que es más fácil. Brian's solution también descubrió este método, y es mejor.

+0

Hmm. Preferiría no tener que definir cada AppName como una macro, y luego usar esa macro para definir el AppName real en cada programa. Pero esto es un comienzo. –

+0

Sé lo que quieres decir. Pero no conozco otra forma de hacerlo. –

19

Inspirado por la respuesta de Craig, estaba mirando la documentación del preprocesador de configuración de Inno (en ISTool, no disponible en línea por lo que he encontrado), y encontré la función SetupSetting en el preprocesador.

Puede ser utilizado como tal:

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

Y mientras la sección [Setup] aparece antes de que el lugar donde éste se utiliza (ISPP parece ser sólo una pasada), e incluye una definición para AppName, esto dará los resultados que quiero, sin tener que definir una macro adicional para cada configuración que queremos extraer.

+0

Estaba mirando una de mis secuencias de comandos y descubrí que había usado esto (en realidad había usado '{#emit SetupSetting (" AppId ")}' pero lo suficientemente cerca). Vine para actualizar mi respuesta, ¡pero veo que me has vencido! –

+3

{# es la abreviatura de {#emit – mlaan

Cuestiones relacionadas