【发布时间】:2020-12-18 02:28:18
【问题描述】:
我正在使用 InnoSetup 6(Windows 10、Visual Studio Code 和 WSL 作为我的 shell)来创建安装程序。这个 ISCC 编译器是从一个自动化脚本中调用的。该脚本负责设置包含生成的安装程序版本和生成的安装程序名称的环境变量。它们都旨在用于脚本调用的 InnoSetup 安装程序编译器 (iscc.exe)。
我使用 envvars 是因为我不想用硬连线的版本号弄乱我的 ISS 文件。
根据 StackOverflow (Can one use environment variables in Inno Setup scripts?) 上的这个问题,我认为在 Innosetup 中可以使用环境变量。
不幸的是,Innosetup 向"The [Setup] section must include an AppVersion or AppVerName directive." 投诉。就像GetEnv() 产生一个空字符串一样。
我尝试像这样从命令行手动调用 ISCC:
export JFROG_DEFAULTGROUPS_VERSION=1.0.0-1 && [path..]\iscc.exe myiss.iss
甚至使用export 导出环境变量:
export JFROG_DEFAULTGROUPS_VERSION=1.0.0-1
,然后检查环境变量是否实际设置并启动编译器: 环境 [路径..]\iscc.exe myiss.iss
在这种情况下,env 产生以下结果:
JFROG_DEFAULTGROUPS_VERSION=1.0.0-1
SHELL=/bin/bash
PATH=[...]
[...]
这让我觉得根据我的 shell (WSL) 设置了环境。但两者都没有给出更好的结果。
我的 ISS 文件如下:
#define MyInstName "MyApp"
#define MyInstVersion GetEnv("JFROG_DEFAULTGROUPS_VERSION")
[Setup]
AppName={#MyInstName}
AppVersion={#MyInstVersion}
DefaultGroupName={#MyInstName}
OutputBaseFilename=MyApp_{#MyInstVersion}_setup
AppendDefaultDirName=no
DefaultDirName={commonpf}
[Components]
Name: default_groups_conf; Description: Default Groups Configuration; Types: full
[Run]
[Code]
function InitializeSetup(): Boolean;
begin
if not ('{#MyInstVersion}' = '') then begin
MsgBox('MyInstVersion Env Var not set.', mbInformation, MB_OK);
Abort;
end;
end;
这有什么问题?如何正确捕获 [Setup] 和 [Code] 部分中的环境变量?
【问题讨论】:
-
编译你的脚本在第一行就失败了,"Undeclared identifier: "MyApp"." 没错。 – 假设这只是一个错误,而您正在清理脚本。而实际的脚本更像
#define MyInstName "MyApp"。然后脚本会做它应该做的事情。当我使用以下行从批处理文件编译它时,它工作得很好:1)set JFROG_DEFAULTGROUPS_VERSION=2.1.42)ISCC.exe Example1.iss– 什么是export? Windows 批处理文件中没有导出命令,PowerShell 中也没有。你在 Windows 上使用 *nix shell 吗? -
这看起来不像是 Inno Setup 问题。更有可能是您实际上没有正确设置环境变量。
-
@MartinPrikryl,谢谢!我修复了示例代码,它确实是一个清理错误。是的,我的目标是 WSL。在成功调用 ISCC 之前从终端列出环境变量(env 命令)会显示环境变量,因此看起来它设置正确(根据 WSL),但 InnoSetup 出于任何原因可能无法理解。刚刚从 Windows 命令行解释器尝试过:完美无缺。使用 WSL 而不是 Inno Setup 标记此问题。谢谢!
-
@MartinPrikryl,感谢您为我指明了正确的方向。我读到了这个:devblogs.microsoft.com/commandline/…,让事情变得更清楚了!
标签: environment-variables windows-subsystem-for-linux