Como definir definições de ISPP com base nas variáveis padrão do Inno Setup?
-
15-11-2019 - |
Pergunta
Eu estava tentando:
#define CommonAppData {commonappdata}
mas rende:
Erro do compilador
[ISPP] Expressão esperada, mas chave de abertura ("{") encontrada.
Como conseguir isso com o Inno Setup PreProcessor?
Solução
{commonappdata}
não pode ser expandido em tempo de compilação, ou seja,quando o pré-processador é executado porque só é conhecido em tempo de execução:Ele identifica o diretório comum de dados do aplicativo na máquina onde o instalador compilado é executado.
Talvez se você pudesse esclarecer como pretende usar essa definição, poderíamos ajudar.Se, por exemplo, o que realmente lhe interessa não é o diretório comum de dados do aplicativo na máquina de destino, mas aquele na máquina do desenvolvedor, provavelmente você poderá usar isto:
#define CommonAppData GetEnv("COMMONAPPDATA")
Se, no entanto, você pretende usar essa definição para preencher propriedades do Inno que são capazes de expandir a constante em tempo de execução, você deve usar isto:
#define CommonAppData "{commonappdata}"
Espero que isto ajude.
Outras dicas
#define
é uma diretiva de pré-processador inno setup, em fase de pré-compilação.Funciona como um pré-processador C.
Ao definir uma variável de pré-processador, forçamos o compilador a ver um script depois que as definições de ispp forem resolvidas:
Inno Setup Preprocessor (ISPP) é um complemento para o compilador Inno Setup de Jordan Russell.Mais tecnicamente falando, é uma camada adicional entre a GUI (seu script Inno Setup) e o compilador, que antes de passar o texto o intercepta e o modifica de uma forma informada usando diretivas especiais no texto do script.
Dito isto, não consigo encontrar uma fonte na documentação nem tenho tempo para pesquisar o código-fonte, mas tenho certeza de que nenhuma variável de configuração não está disponível durante esse tempo de pré-compilação.
Se você deseja apenas que a variável definida contenha a string {commonappdata}
, use-o diretamente em sua fonte ...se você deseja que a variável definida tenha o valor de tempo de execução de commonappdata, não me parece possível, porque esse valor é determinado em tempo de execução, pois seu valor atual depende da máquina de destino (versão do Windows, idioma, etc.) .
Se você pensar duas vezes, não faz sentido tentar usar esse valor na pré-compilação ou no tempo de compilação...este é apenas o fato que não traz constantes de configuração como {commonappdata}
, {destdir}
e coisas assim para a existência...que você pode expressar de maneira padrão em tempo de compilação um valor desconhecido, mas significativo, que será conhecido e avaliado em tempo de execução.
Você provavelmente precisará escapar da cinta.Algo como:
#define CommonAppData {{commonappdata}