Inno setup Inno设置:在[Run]部分执行Pascal函数

Inno setup Inno设置:在[Run]部分执行Pascal函数,inno-setup,pascalscript,Inno Setup,Pascalscript,在安装结束时,我需要运行一个Pascal函数来更新飞行模拟器.cfg文件(在Inno设置中称为.ini文件)。Pascal函数存在于其[code]部分中,并且运行正常。我想在[run]部分使用StatusMsg运行这个Pascal函数,告诉用户发生了什么 [Run] Filename: {code:FsxEditSceneryFile|Add#<scenerySpec>}; StatusMsg: "Add scenery to FSX"; ; <scener

在安装结束时,我需要运行一个Pascal函数来更新飞行模拟器
.cfg
文件(在Inno设置中称为
.ini
文件)。Pascal函数存在于其
[code]
部分中,并且运行正常。我想在
[run]
部分使用
StatusMsg
运行这个Pascal函数,告诉用户发生了什么

[Run]
Filename: {code:FsxEditSceneryFile|Add#<scenerySpec>}; StatusMsg: "Add scenery to FSX";
; <scenerySpec> is just a place holder of the actual scenery specification!
[运行]
文件名:{code:FsxEditSceneryFile | Add#};StatusMsg:“将布景添加到FSX”;
;  只是一个地方持有人的实际风景规格!
除了Inno Setup强制我使用
字符串
作为Pascal函数的返回值之外,所有操作都按预期进行。但是,
Filename
语句需要一个
Boolean
作为返回值,以指定执行是成功的(
True
)还是失败的(
False
)。这种类型不匹配会在执行
Filename
语句结束时产生一个错误消息框,其中

CreateProcess失败;代码87。参数错误


有什么建议可以解决这个问题吗?我知道存在我可以使用的事件函数,例如
CurStepChanged()
,但我发现
StatusMsg
机制很好地告诉用户安装完成了什么。

您正在滥用
文件名
参数解析来执行一些代码。解析参数值时,它是未记录的。这使得你的方法不可靠。当显示
StatusMsg
时,您无法知道该值已解析。而且,无论如何,该值必须解析为可执行路径。Inno安装程序将尝试执行它(因此出现错误)。你可能不想要的。不要那样做


相反,正如您所建议的,使用
CurStepChanged
。您可以通过访问来显示Pascal代码中的状态消息

过程CurStepChanged(CurStep:TSetupStep);
开始
如果CurStep=ssPostInstall,则
开始
WizardForm.StatusLabel.Caption:=“安装某物…”;
{安装某物}
结束;
结束;

非常感谢您的帮助!