可以在 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-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')';
【讨论】:
【参考方案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|default
在 target 机器上的 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 *not* 创建 unins000 文件吗
在Inno Setup中[Run]程序无法识别[不可用]环境变量
在关闭Inno Setup到Windows之前,发送关于重新检查PATH环境变量的消息[重复]。