【问题标题】:Inno Setup ParseVersion is not callable from [Code]Inno Setup ParseVersion 不可从 [代码] 调用
【发布时间】:2020-12-21 22:28:47
【问题描述】:

例如,宏 ParseVersionRemoveBackslash 都在 ISPPBuiltins.iss 中声明。如果我尝试从 [代码] 中调用两者:

function InitializeSetup: Boolean;
var
    Major, Minor, Rev, Build: Integer;
begin
    RemoveBackslash('123\');
    ParseVersion('12345', Major, Minor, Rev, Build);
end;

RemoveBackslash 可以正常编译,但添加 ParseVersion 会导致编译器错误:

未知标识符'ParseVersion'"

当作为另一个宏声明的一部分时,ParseVersion 似乎编译得很好,只是不是来自[Code]。我应该可以这样称呼它吗?

【问题讨论】:

    标签: inno-setup pascalscript


    【解决方案1】:

    正如@Andrew 已经写的那样,ParseVersion(或者实际上从Inno Setup 6.1 开始,GetVersionComponents)是一个预处理器函数。因此必须使用预处理器指令调用它,并将其结果存储到预处理器变量中。

    #define Major
    #define Minor
    #define Rev
    #define Build
    #expr GetVersionComponents("C:\path\MyProg.exe", Major, Minor, Rev, Build)
    

    如果您需要使用 Pascal 脚本Code 中的变量,则再次需要使用预处理器语法。例如:

    [Code]
    
    function InitializeSetup: Boolean;
    begin
      MsgBox('Version is: {#Major}.{#Minor}.{#Rev}.{#Build}.', mbInformation, MB_OK);
      Result := True;
    end;
    

    上面是真的,如果你真的想在编译时提取版本号。如果您真的想在Code 部分执行此操作,即在安装时,您必须使用Pascal Script support function GetVersionComponents(是的,名称相同,但语言不同):

    [Code]
    
    function InitializeSetup: Boolean;
    var
      Major, Minor, Rev, Build: Word;
      Msg: string;
    begin
      GetVersionComponents('C:\path\MyProg.exe', Major, Minor, Rev, Build);
      Msg := Format('Version is: %d.%d.%d.%d', [Major, Minor, Rev, Build]);
      MsgBox(Msg, mbInformation, MB_OK);
      Result := True;
    end;
    

    Pascal 脚本函数 GetVersionComponents 仅在 Inno Setup 6.1 之后可用。


    RemoveBackslash 在两种情况下都有效,因为Pascal Script RemoveBackslashPreprocessor RemoveBackslash 都有。

    【讨论】:

      【解决方案2】:

      Change Log(适用于 6.1.x)中提到:

      支持功能GetFileVersionParseVersion已分别重命名为GetVersionNumbersStringGetVersionComponents。旧名称仍受支持,但建议您将脚本更新为新名称,否则编译器会发出警告。

      所以升级时要小心。但正如您所说的那样,这些是 Inno Setup Preprocessor (ISPP) 功能。关于 Pascal 脚本 部分,Support Function Reference 中没有列出任何内容。

      其他人可能对此有更多见解,或提供解决方法,但您可能必须在信息设置forum 中请求该功能。

      【讨论】:

        猜你喜欢
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多