【发布时间】:2011-01-01 09:57:48
【问题描述】:
我需要找到一种方法来引用 Inno Setup 脚本文件 (.iss) 内的环境变量...
我发现很多关于从 .iss 修改环境的参考资料,但没有关于如何实际使用它的参考资料。这可能吗?
【问题讨论】:
标签: environment-variables inno-setup
我需要找到一种方法来引用 Inno Setup 脚本文件 (.iss) 内的环境变量...
我发现很多关于从 .iss 修改环境的参考资料,但没有关于如何实际使用它的参考资料。这可能吗?
【问题讨论】:
标签: environment-variables inno-setup
如果你想在install-time 或compile-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')}';
【讨论】:
我不知道如何使用{%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|default} 在 target 机器上的 run time 上解析。当您的代码在 build 机器上的 compile 时间解析变量时——另请参阅我的 cmets 对@МаксимРумянцев 的答案。
如果变量 TEMP 不存在,那么将使用默认值 - ..\..\distr\ ))))
OutputDir={#StringChange(GetEnv("TEMP")+"\", StringChange(GetMD5OfString(GetEnv("TEMP")), "d41d8cd98f00b204e9800998ecf8427e", "\"), "..\..\distr\")}
【讨论】:
这可能更容易:
OutputDir={#GetEnv("TEMP")}\
【讨论】:
根据 Inno Setup 文档中的this page,可以使用以下语法检索环境变量的值:
{%name|default}
【讨论】:
ExpandConstant - 这是一个矫枉过正,有GetEnv。我的回答中也提到了。
我在尝试在 [Files] 部分中指定文件的源位置时遇到了同样的问题。我使用 GetEnv 函数定义了一个新常量。
#define Qt5 GetEnv('QT5')
[Files]
Source: {#Qt5}\bin\Qt5Concurrent.dll; DestDir: {app};
【讨论】: