如何避免在 InnoSetup 静默模式下覆盖?
How to avoid overriding in InnoSetup silent mode?
我正在尝试使用 InnoSetup 的静默模式。如果在静默模式安装中指定,我必须更新 "License" 键值。
这就是我配置 Inno 文件的方式:
[INI]
Filename: define.ini; Section: "General"; Key: "License"; String: "{param:LICENSE}"; Check: WizardSilent;
当用户以这种方式安装应用程序时效果很好:
setup.exe /SILENT /LICENSE=licensekey
当我想跳过 /LICENSE 参数时出现问题(因为它已经配置并且我不想更改它。例如:安装补丁包时)。
使用以下方式覆盖 INI 文件上的 "License" 键并将其留空:
setup.exe /SILENT
如何避免这种情况?在这种情况下,我只想不更改 "License" 值。
谢谢!
我可以想到两个选项,因为您使用的是自定义参数。您可以将 {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;
我正在尝试使用 InnoSetup 的静默模式。如果在静默模式安装中指定,我必须更新 "License" 键值。 这就是我配置 Inno 文件的方式:
[INI]
Filename: define.ini; Section: "General"; Key: "License"; String: "{param:LICENSE}"; Check: WizardSilent;
当用户以这种方式安装应用程序时效果很好:
setup.exe /SILENT /LICENSE=licensekey
当我想跳过 /LICENSE 参数时出现问题(因为它已经配置并且我不想更改它。例如:安装补丁包时)。 使用以下方式覆盖 INI 文件上的 "License" 键并将其留空:
setup.exe /SILENT
如何避免这种情况?在这种情况下,我只想不更改 "License" 值。
谢谢!
我可以想到两个选项,因为您使用的是自定义参数。您可以将 {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;