2

我试图:

#define CommonAppData {commonappdata}

但它产生:

编译器错误

[ISPP] 应为表达式,但找到了左大括号 ("{")。

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

4

3 回答 3

3

#define是一个 inno setup 预处理器指令,处于预编译阶段。它的工作原理很像 C 预处理器。

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

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

也就是说,我在文档中找不到源代码,也没有时间深入研究源代码,但我很确定在此预编译期间 inno 设置变量不可用。

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

如果您三思而后行,那么在预编译或编译时尝试使用该值是没有意义的……这就是使诸如{commonappdata},{destdir}之类的设置常量存在的全部事实……您可以在编译时以标准方式表达一个未知但有意义的值,该值将在运行时被知道和评估。

于 2011-02-21T16:56:37.797 回答
3

{commonappdata}不能在编译时扩展,即当预处理器运行时,因为它只在运行时知道:它标识了运行已编译安装程序的机器上的公共应用程序数据目录。

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

#define CommonAppData GetEnv("COMMONAPPDATA")

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

#define CommonAppData "{commonappdata}"

希望这可以帮助。

于 2011-03-04T13:15:51.523 回答
1

您可能需要摆脱支架。就像是:

#define CommonAppData {{commonappdata}
于 2011-02-18T17:58:57.470 回答