首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用Inno安装程序中的脚本和命令行args来选择一个#include路径吗?

我可以使用Inno安装程序中的脚本和命令行args来选择一个#include路径吗?
EN

Stack Overflow用户
提问于 2016-02-02 15:24:53
回答 1查看 370关注 0票数 2

因此,当我有许多安装时,除了安装中的文件之外,大部分都是相同的,问题就出现了。我有一套不同的包含文件。

所以我想,“嘿,让我们简单地添加一个命令行参数来指定要包含的文件。”我可以从Pascal代码中的命令行参数中获得信息。

当我尝试使用#include中的信息时,问题就出现了。预处理器似乎对Pascal脚本一无所知。这是有道理的,但我想知道。例如,我不能这样做:

代码语言:javascript
复制
[Files]
#include "{code:GetMyArgument}"

或者这个:

代码语言:javascript
复制
[Files]
#include {param:foo|bar}

所以问题是:我如何设置一个#include来包含我在命令行参数中设置的路径文件?或者其他一些动态方法。我能想到一个。我只是不喜欢我的方式:我不喜欢为这个动态移动文件或更改文件内容的想法,我想我的/这个/这些解决方案闻起来很难闻。有更好的办法吗?

我在版本5.5.6(u)的Inno设置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-02 15:37:04

只需使用预处理变量:

代码语言:javascript
复制
#include IncludePath

并在编译器的命令行中指定其值:

代码语言:javascript
复制
ISCC.exe Example1.iss /DIncludePath=Other.iss

switch的意义

代码语言:javascript
复制
/D<name>[=<value>] Emulate #define public <name> <value>

如果您使用的Inno安装IDE不支持设置编译器的命令行参数(如Inno脚本Studio),则可以将包含的脚本的文件名基于某些安装程序的选项,如AppIdAppNameOutputBaseFilename等。

例如,对于基于AppName的名称,请使用:

代码语言:javascript
复制
#include SetupSetting("AppName") + ".iss"

请注意,只有在调用 preprocessor function preprocessor function指令位于相应的[Setup]部分指令之后时,这才有效。

另一种选择是反转包含的内容。

.iss是特定于项目的,它包括一个共享的.iss

项目专用.iss

代码语言:javascript
复制
; Project-specific settings
[Setup]
AppId=id
AppName=name

[Files]  
; Project specific files

; Include shared script
#include "shared.iss"

请注意,如果部分重复,这是完全没有问题的。因此,shared.iss可以再次包括[Setup][Files]部分以及其他指令和文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35157359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档