【问题标题】:How to avoid overriding in InnoSetup silent mode?如何避免在 InnoSetup 静默模式下覆盖?
【发布时间】:2015-01-07 10:38:14
【问题描述】:

我正在尝试使用 InnoSetup 的静默模式。如果在静默模式安装中指定,我必须更新“许可证”键值。 这就是我配置 Inno 文件的方式:

[INI]
Filename: define.ini; Section: "General"; Key: "License"; String: "{param:LICENSE}"; Check: WizardSilent;

当用户以这种方式安装应用程序时效果很好:

setup.exe /SILENT /LICENSE=licensekey

当我想跳过 /LICENSE 参数时会出现问题(因为它已经配置并且我不想更改它。例如:安装补丁包时)。 使用以下方式覆盖 INI 文件上的“License”键并将其留空:

setup.exe /静音

如何避免这种情况?在这种情况下,我只想不更改“许可证”值。

谢谢!

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    我可以想到两个选项,因为您使用的是自定义参数。您可以将{param} 常量的默认值定义为从同一 INI 文件中读取的现有值:

    [INI]
    ...; String: "{param:LICENSE|{ini:define.ini,General,License|}}"
    

    上述语句写入由LICENSE 命令行参数传递的给定INI 文件值,或者如果未指定,则从同一文件中读取相同的值。所以如果没有指定参数,它实际上会用相同的值覆盖值,这在我看来不是很干净。

    或者,您可以通过如下的辅助函数扩展现有的Check 参数。这是我更喜欢的方式,因为您只需跳过对条目的处理,而不是在未指定参数时覆盖相同的值:

    [INI]
    ...; Check: WizardSilent and CmdLineParamExists('/LICENSE')
    
    [Code]
    function CmdLineParamExists(const Value: string): Boolean;
    var
      I: Integer;  
    begin
      Result := False;
      for I := 1 to ParamCount do
        if CompareText(ParamStr(I), Value) = 0 then
        begin
          Result := True;
          Exit;
        end;
    end;
    

    【讨论】:

    • 谢谢@TLama。我终于使用了第一个选项,它对我有用。我首先尝试了第二个选项,但是当我省略参数时它不起作用。
    • 不客气!好吧,我已经测试了两者并且都为我工作。它读取为在安装程序静默运行并且找到 /LICENSE 参数时处理条目
    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2014-01-17
    • 2021-11-10
    • 2015-05-15
    • 1970-01-01
    • 2019-03-27
    • 2013-06-02
    相关资源
    最近更新 更多