Comment définir ISPP defines basé sur les variables de configuration Inno par défaut?

j'essayais de:

#define CommonAppData {commonappdata}

mais il donne:

Erreur Du Compilateur

[ISPP] Expression attendue mais ouverture brace ("{ " ) trouvée.

comment réaliser ceci avec Inno Setup préprocesseur?

2
demandé sur Jader Dias 2011-02-18 19:36:28

3 réponses

{commonappdata} ne peut pas être étendu au moment de la compilation, c'est-à-dire lorsque le préprocesseur s'exécute car il n'est connu qu'au moment de l'exécution: il identifie le répertoire commun de données d'application sur la machine où l'installateur compilé est exécuté .

peut-être que si vous pouviez clarifier comment vous avez l'intention d'utiliser cette définition, nous pourrions vous aider. Si par exemple ce qui vous intéresse vraiment n'est pas le répertoire de données commun de l'application sur la machine cible mais celui sur l'ordinateur du développeur, alors vous pouvez probablement utiliser ceci:

#define CommonAppData GetEnv("COMMONAPPDATA")

si toutefois vous avez l'intention d'utiliser ce define pour peupler les propriétés Inno qui sont elles-mêmes capables d'étendre la constante à l'exécution, alors vous devez utiliser ceci:

#define CommonAppData "{commonappdata}"

Espérons que cette aide.

3
répondu Oliver Giesen 2011-03-04 13:15:51

#define est une directive inno setup pre-processor, en phase de pré-compilation. Il fonctionne un peu comme un pré-processeur C.

en définissant un processeur pré-variable, nous forcons le compilateur à voir un script après que les définitions ispp sont résolues:

Inno Setup Preprocessor (ISPP) est un add-on pour le compilateur Inno Setup DE Jordan Russell. Plus techniquement parlant, c'est une couche supplémentaire entre GUI (votre script de configuration Inno) et le compilateur, qui avant de passer le texte intercepte et le modifie d'une manière qu'il est dit en utilisant des directives spéciales dans le texte de script.

cela dit, Je ne trouve pas de source dans la documentation et je n'ai pas le temps de creuser dans le code source, mais je suis presque sûr que les variables de configuration inno ne sont pas disponibles pendant cette période de pré-compilation.

si vous voulez juste que la variable définie contienne la chaîne {commonappdata} , utilisez-la directement dans votre source... si vous voulez le défini variable pour avoir la valeur d'exécution de commonappdata, il ne me semble pas possible, parce que cette valeur est déterminée à l'exécution puisque sa valeur actuelle dépend de la machine cible (version windows, langue, etc.).

si vous y pensez à deux fois, cela n'a pas de sens d'essayer d'utiliser cette valeur au moment de la pré-compilation ou de la compilation... c'est tout le fait qui apporte inno constantes de configuration comme {commonappdata} , {destdir} et les semblables à l'existence... que vous pouvez exprimer dans un méthode standard au moment de la compilation une valeur inconnue mais significative, qui sera connue et évaluée à l'exécution.

3
répondu jachguate 2011-02-21 16:56:37

, Vous aurez probablement besoin d'échapper à l'attache. Quelque chose comme:

#define CommonAppData {{commonappdata}
1
répondu mirtheil 2011-02-18 17:58:57