J'annexant le code NSIS à un fichier temporaire pour inclure plus tard dans le même installateur:
...
!tempfile includeInSectionA
...
!appendfile '${includeInSectionA}' '<some NSIS code>$\n'
...
Section "A" SEC_A
!include '${includeInSectionA}'
SectionEnd
...
Une partie du code NSIS Je veux ajouter au fichier temporaire contient variables (ou définit, même problème) comme ${variable}
:
Var variable
StrCpy ${variable} 'contentOfVariable'
...
!appendfile '${includeInSectionA}' 'DetailPrint "Variable: ${variable}"$\n'
le problème: la variable doit développer au moment de l'inclusion de fichier temporaire, pas au moment de l'ajout au fichier temporaire, parce que son contenu sera changé entre-temps:
!appendfile '${includeInSectionA}' 'DetailPrint "Variable: ${variable}"$\n'
; --> DetailPrint "Variable: contentOfVariable" ; WRONG
; --> DetailPrint "Variable: ${variable}" ; RIGHT
Il doit donc être échappé d'une manière ou d'une autre.
Échapper le signe du dollar et/ou les crochets comme suit ne fonctionne pas:
!appendfile '${includeInSectionA}' 'DetailPrint "Variable: $${variable}"$\n'
; --> DetailPrint "Variable: $contentOfVariable"
!appendfile '${includeInSectionA}' 'DetailPrint "Variable: $\{variable}"$\n'
; --> DetailPrint "Variable: $\{variable}"
!appendfile '${includeInSectionA}' 'DetailPrint "Variable: $\${variable}"$\n'
; --> DetailPrint "Variable: $\contentOfVariable"
Une solution serait de briser la variable comme celui-ci est, mais qui est ... laid, facile à briser et difficile à maintenir:
!appendfile '${includeInSectionA}' 'DetailPrint "Variable: $'
!appendfile '${includeInSectionA}' '{variable}"$\n'
Alors, comment faire pour échapper "$ {variable}"?
$ {VARIABLE} n'est pas une variable, c'est une définition! – Anders
@Anders: Bien sûr! Corrigé, bien que non pertinent par rapport au problème. – bassim