可以在 Inno Setup 脚本中使用环境变量吗?

Posted

技术标签:

【中文标题】可以在 Inno Setup 脚本中使用环境变量吗?【英文标题】:Can one use environment variables in Inno Setup scripts? 【发布时间】:2011-01-01 09:57:48 【问题描述】:

我需要找到一种方法来引用 Inno Setup 脚本文件 (.iss) 内的环境变量...

我发现很多关于从 .iss 修改环境的参考资料,但没有关于如何实际使用它的参考资料。这可能吗?

【问题讨论】:

【参考方案1】:

如果你想在install-timecompile-time 解析变量,语法是不同的。这就是为什么有两个现有答案显示了完全不同的解决方案,它们适用于某些人而不适用于其他人。因为不同的读者在这里寻找不同的东西。


安装时

如果需要解析目标机器上的变量,安装时可以使用%NAME|DefaultValue "constant"。

[Files]
Source: "MyApp.dat"; Dest: "%MYAPP_DATA_PATH|app"

如果你需要在Pascal Script代码中解析目标机器上的变量,可以使用GetEnv support function。

Path := GetEnv('MYAPP_DATA_PATH');

编译时

如果需要解析源机器上的变量,在编译安装程序时,可以使用GetEnv preprocessor function:

[Files]
Source: "MyApp.dat"; Dest: "#GetEnv('MYAPP_DATA_PATH')"

即使在 Pascal 脚本中,您也可以使用相同的语法,但只有在非常特殊的情况下才有意义。

Path := '#GetEnv('MYAPP_DATA_PATH')';

【讨论】:

【参考方案2】:

我不知道如何使用%name|default 语法,所以我就是这样实现的(当环境变量不存在时,我需要指定一个默认值):

#if GetEnv('EXTRA_FILE_LOCATION') != ""
#define EXTRA_LOCATION=GetEnv('EXTRA_FILE_LOCATION')
#else
#define EXTRA_LOCATION="."
#endif
Source: #EXTRA_LOCATION\ExtraFile.data; DestDir: app;

【讨论】:

解释区别:%name|defaulttarget 机器上的 run time 上解析。当您的代码在 build 机器上的 compile 时间解析变量时——另请参阅我的 cmets 对@МаксимРумянцев 的答案。【参考方案3】:

如果变量 TEMP 不存在,那么将使用默认值 - ..\..\distr\ ))))

OutputDir=#StringChange(GetEnv("TEMP")+"\", StringChange(GetMD5OfString(GetEnv("TEMP")), "d41d8cd98f00b204e9800998ecf8427e", "\"), "..\..\distr\")

【讨论】:

这是一个预处理器宏。它已在编译时解决!【参考方案4】:

这可能更容易:

OutputDir=#GetEnv("TEMP")\

【讨论】:

这是一个预处理器宏。它已在编译时解决!【参考方案5】:

根据 Inno Setup 文档中的this page,可以使用以下语法检索环境变量的值:

%name|default

【讨论】:

由于某种原因我无法使用环境变量。有人可以发布一个例子吗?我将 %OS 添加到输出文件名中,我得到的只是原始文件名,附加了字符串“%OS” - 不是我想要的环境值。 @Tim:如果您想在 [code] 中的字符串中使用变量,请使用 ExpandConstant('%OS') 语法不同,如果你想在安装时或编译时解析变量。有关详细信息,请参阅my answer。 -- 至于ExpandConstant - 这是一个矫枉过正,有GetEnv。我的回答中也提到了。【参考方案6】:

我在尝试在 [Files] 部分中指定文件的源位置时遇到了同样的问题。我使用 GetEnv 函数定义了一个新常量。

#define Qt5 GetEnv('QT5')
[Files]
Source: #Qt5\bin\Qt5Concurrent.dll; DestDir: app; 

【讨论】:

这是在定义中使用的正确方法。 %name|default 符号在那里不起作用。

以上是关于可以在 Inno Setup 脚本中使用环境变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Inno Setup安装程序设置全局环境变量?

我可以告诉 Inno Setup *not* 创建 unins000 文件吗

在Inno Setup中[Run]程序无法识别[不可用]环境变量

在关闭Inno Setup到Windows之前,发送关于重新检查PATH环境变量的消息[重复]。

运行 Inno Setup Installer 时如何修改 PATH 环境变量?

Inno Setup执行SQL脚本的方法