如何避免在InnoSetup静音模式中覆盖?

时间:2015-01-07 10:38:15

标签: inno-setup

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

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

当用户以这种方式安装应用程序时,它很有用:

  

setup.exe / SILENT / LICENSE = licensekey

当我想跳过/ LICENSE参数时会出现问题(因为它已经配置好了,我不想更改它。例如:安装补丁包时)。 使用以下方法覆盖INI文件中的“许可证”密钥,并将其留空:

  

setup.exe / SILENT

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我可以考虑两个选项,因为您使用的是自定义参数。您可以将{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;