使用命令行参数抑制 Inno Setup 任务

Suppressing Inno Setup task with a commandline parameter

我的目标是创建一个既可以在启动时提供条件参数又可以有可检查任务的安装程序。

通过可选参数 /NOAUTOSTART,安装程序应该跳过在注册表中创建一个条目,该条目让工具在 Windows 登录时启动。 此外,此功能应该能够通过任务切换,并让用户决定是否应启用此功能。 此外,如果在执行安装程序时传递参数 /NOAUTOSTART,无论如何都应跳过此 task/window,因此否决此屏幕。

这怎么可能?

到目前为止,我一直在想出以下解决方案:

[Tasks]
Name: autostartWhenChecked; Description: "Automatically start agent on login"

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; \
    ValueType: string; ValueName: "Updater Agent"; \
    ValueData: """{app}\Agent.exe"""; Flags: uninsdeletevalue; \
    Tasks: autostartWhenChecked;

这成功地处理了我的安装程序中的复选框。

但结合以下内容,检索启动参数(感谢这个答案:Passing conditional parameter in Inno Setup):

[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;

function ShouldEnableAutostart: Boolean;
begin
    if CmdLineParamExists('/NOAUTOSTART') then
        begin
            Checkbox :=
                WizardForm.TasksList.Items.IndexOf(
                    'Automatically start agent on login');
            WizardForm.TasksList.CheckItem(Checkbox, coUncheck);
            Result := False;
        end
    else
        Result := True;
end;

我无法将这两种可能性结合起来。此外,我正在努力研究如何获取任务的索引,上面的代码总是 returns 索引越界 (-1)。好像怎么也找不到任务的描述文字了

只需隐藏任务,使用 Check parameter 引用您的 CmdLineParamExists 函数,如果它检测到指定了命令行参数。

[Tasks]
Name: autostartWhenChecked; Description: "Automatically start agent on login"; \
   GroupDescription: "{cm:AdditionalIcons}"; \
   Check: not CmdLineParamExists('/NOAUTOSTART')