27

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

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

4

6 回答 6

20

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

#define Qt5 GetEnv('QT5')
[Files]
Source: {#Qt5}\bin\Qt5Concurrent.dll; DestDir: {app}; 
于 2013-08-06T19:38:27.653 回答
17

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

{%name|default}
于 2010-01-04T21:35:13.433 回答
11

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


在安装时

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

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

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

Path := GetEnv('MYAPP_DATA_PATH');

在编译时

如果您需要在源机器上解析变量,在编译安装程序时,您可以使用GetEnv预处理器功能

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

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

Path := '{#GetEnv('MYAPP_DATA_PATH')}';
于 2019-01-21T09:05:44.933 回答
2

它可以更容易:

OutputDir={#GetEnv("TEMP")}\
于 2017-05-10T14:47:02.703 回答
1

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

OutputDir={#StringChange(GetEnv("TEMP")+"\", StringChange(GetMD5OfString(GetEnv("TEMP")), "d41d8cd98f00b204e9800998ecf8427e", "\"), "..\..\distr\")}
于 2017-05-10T15:40:44.337 回答
0

我不知道如何使用{%name|default}语法,所以这就是我实现相同的方式(当 env var 不存在时,我需要指定一个默认值):

#if GetEnv('EXTRA_FILE_LOCATION') != ""
#define EXTRA_LOCATION=GetEnv('EXTRA_FILE_LOCATION')
#else
#define EXTRA_LOCATION="."
#endif
Source: {#EXTRA_LOCATION}\ExtraFile.data; DestDir: {app};
于 2019-01-19T22:17:38.627 回答