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

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

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

【问题讨论】:

    标签: environment-variables inno-setup


    【解决方案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|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} 符号在那里不起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      相关资源
      最近更新 更多