如何根据默认的Inno Setup变量设置ISPP定义?

时间:2011-02-18 16:36:29

标签: preprocessor environment-variables inno-setup pre-compilation

我试图:

#define CommonAppData {commonappdata}

但它产生了:

  

编译器错误

     

[ISPP]预期表达式但是找到了开头括号(“{”)。

如何使用Inno Setup PreProcessor实现这一目标?

3 个答案:

答案 0 :(得分:3)

#define是预编译阶段的inno设置预处理器指令。它的工作方式与C预处理器非常相似。

通过定义预处理器变量,我们强制编译器在解析ispp定义后查看脚本:

Inno Setup Preprocessor(ISPP)是Jordan Russell的Inno Setup编译器的附加组件。从技术上讲,它是GUI(你的Inno安装脚本)和编译器之间的一个附加层,它在传递文本拦截之前以一种在脚本文本中使用特殊指令的方式修改它。

也就是说,我无法在文档中找到源代码,也没有时间深入了解源代码,但我非常确定在预编译期间无法使用inno设置变量。

如果您只是希望定义的变量包含字符串{commonappdata},请直接在源代码中使用它...如果您希望定义的变量具有commonappdata的运行时值,则它似乎不会对我来说可能,因为该值是在运行时确定的,因为它的当前值取决于目标机器(Windows版本,语言等)。

如果你认为它是两次,那么尝试在预编译或编译时使用该值是没有意义的...这只是带来像{commonappdata},{{destdir}这样的创新设置常量的全部事实。 {1}}等存在......您可以在编译时以标准方式表达一个未知但有意义的值,这些值将在运行时被识别和评估。

答案 1 :(得分:3)

{commonappdata}无法在编译时扩展,即预处理器运行时因为它仅在运行时已知:它在运行已编译安装程序的机器上标识公共应用程序数据目录 < /强>

也许如果你能澄清你打算如何使用那个定义,我们可能会提供帮助。例如,如果你真正感兴趣的不是目标机器上的常见应用程序数据目录,而是开发人员机器上的那个,那么你可以使用它:

#define CommonAppData GetEnv("COMMONAPPDATA")

如果您打算使用该定义来填充本身能够在运行时扩展常量的Inno属性,那么您应该使用它:

#define CommonAppData "{commonappdata}"

希望这有帮助。

答案 2 :(得分:1)

你可能需要逃脱支具。类似的东西:

#define CommonAppData {{commonappdata}