Inno setup 根据所选任务生成从Inno Setup[Run]部分执行的程序参数

Inno setup 根据所选任务生成从Inno Setup[Run]部分执行的程序参数,inno-setup,Inno Setup,我编写了一个安装脚本来安装第三方setup.exe,然后运行该脚本以静默方式安装它。运行此external setup.exe时,必须通过其命令行参数指定要安装的产品。为此,我有十几个任务,每个任务代表要安装或不安装的产品 因为任务太多了,所以我用一种更简单、更聪明的方式思考,而不是用和/而不是任务检查12*12次来写下面这行 [Run] Filename: {tmp}\Setup.exe; Parameters: /ProductNames=product1,product2,etc...;

我编写了一个安装脚本来安装第三方setup.exe,然后运行该脚本以静默方式安装它。运行此external setup.exe时,必须通过其命令行参数指定要安装的产品。为此,我有十几个任务,每个任务代表要安装或不安装的产品

因为任务太多了,所以我用一种更简单、更聪明的方式思考,而不是用
/
而不是
任务检查12*12次来写下面这行

[Run]
Filename: {tmp}\Setup.exe; Parameters: /ProductNames=product1,product2,etc...; \
    Flags: shellexec WaitUntilTerminated; StatusMsg: Installing products...; \
    Tasks: product1 and product2 and not product3 etc...
也许这不是实现这一点的最佳方法,但在
[code]
部分,我声明了一些存储要安装或不安装的产品名称的变量,我希望能够引用这些变量,如下所示:

[Run]
Filename: {tmp}\Setup.exe; Parameters: /ProductNames={%product1}{%product2}; \
    Flags: shellexec WaitUntilTerminated; StatusMsg: Installing products...;
因此,这将简化
[Run]
部分,使其仅限于该行,而不是几十种变体

我该怎么做

如果不可能,那么作为替代,我可以声明一个函数,该函数返回一个逗号分隔的字符串,其中包含要安装的产品名称,但我不知道如何在上面的
[Run]
部分中调用它,以便在我运行的外部setup.exe的
参数
字符串中使用该函数的返回值。。。我是说,像这样的

[Run]
Filename: {tmp}\Setup.exe; Parameters: /ProductNames={MyFunction()}; \
    Flags: shellexec WaitUntilTerminated; StatusMsg: Installing products...;
这是我的
[code]
部分的缩小示例:

[代码]
变量
产品一:字符串;
产品二:细绳;
程序TaskOnClickCheck(发送方:ToObject);
开始
{重置值。}
product1:=“”
产品2:=''
如果选择了ISTASK1(“产品1”),则
开始
product1:=',product1名称'
结束;
如果选择了ISTASK2(“产品2”),则
开始
product2:=',product2名称'
结束;
结束;
过程初始化Wizard();
开始
WizardForm.TasksList.OnClickCheck:=@TaskOnClickCheck;
结束;
使用:

[代码]
函数GetProducts(参数:string):string;
变量
产品列表:TStringList;
开始
ProductList:=TStringList.Create;
如果选择了IsTaskSelected('product1'),则为ProductList.Add('Prod1');
如果选择了IsTaskSelected('product2'),则为ProductList.Add('Prod2');
如果选择了IsTaskSelected('product3'),则为ProductList.Add('Prod3');
结果:=ProductList.CommaText;
ProductList.Free;
日志('产品列表为:'+结果);
结束;
上面的
ProductList.CommaText
将生成类似于
Prod1、Prod2
的输出(尽管如果产品名称中有空格,它将生成
“Prod1”、“Prod2”

[Run]
Filename: {tmp}\Setup.exe; Parameters: /ProductNames={code:GetProducts}; \
    Flags: shellexec waituntilterminated; StatusMsg: Installing products...

[Tasks]
Name: product1; Description: "Product 1"
Name: product2; Description: "Product 2"
Name: product3; Description: "Product 3"