Inno Setup:在[Run]部分执行Pascal功能

时间:2016-02-07 16:43:20

标签: inno-setup

在安装结束时,我需要运行一个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机制很好地告诉用户安装完成了什么。

1 个答案:

答案 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;