在安装结束时,我需要运行一个Pascal函数来更新飞行模拟器.cfg文件(在Inno Setup中称为.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!
所有工作都按预期工作,但Inno Setup强制我使用字符串作为Pascal函数的返回值。但是,“Filename”语句需要使用布尔值作为返回值来指定执行是成功(True)还是失败(False)。此类型不匹配会在执行“Filename”语句
时生成错误消息框CreateProcess失败;代码87.错误的参数。
任何建议如何解决这个问题?我知道存在我可以使用的事件函数,例如CurStepChanged()
但我发现StatusMsg
机制很好地告诉用户安装完成了什么。
答案 0 :(得分:0)
您正在滥用Filename
参数解析来执行某些代码。解析参数值时,它没有记录。这使您的方法不可靠。在显示StatusMsg
时,您无法知道该值已解决。而且,无论如何,该值必须解析为可执行路径。 Inno Setup会尝试执行它(因此错误)。你可能不想要什么。不要那样做。
相反,正如您已经建议的那样,请使用CurStepChanged
。您可以通过访问WizardForm.StatusLabel
来显示Pascal代码中的状态消息。
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.StatusLabel.Caption := 'Installing something...';
{ Install something }
end;
end;