Inno setup 通过代码使卸载注册表项有条件

Inno setup 通过代码使卸载注册表项有条件,inno-setup,Inno Setup,如何通过代码禁用Inno设置 在Inno setup中创建的Mysetup.exe文件接受参数,例如: setup.exe -a 或 如果提供了-a参数,则启用CreateUninstallRegKey,或者如果提供了-b参数,则禁用CreateUninstallRegKey 是否仍然可以通过代码设置CreateUninstallRegKey,或者我必须创建一个函数,然后在脚本部分调用该函数 这解释了如何使用{code:…}常量,但不幸的是,我遇到了以下错误: 谢谢不要使用{code:}表达

如何通过代码禁用Inno设置

在Inno setup中创建的Mysetup.exe文件接受参数,例如:

setup.exe -a

如果提供了
-a
参数,则启用
CreateUninstallRegKey
,或者如果提供了
-b
参数,则禁用
CreateUninstallRegKey

是否仍然可以通过代码设置
CreateUninstallRegKey
,或者我必须创建一个函数,然后在脚本部分调用该函数

这解释了如何使用
{code:…}
常量,但不幸的是,我遇到了以下错误:


谢谢

不要使用
{code:}
表达式将值传递给布尔类型指令。这样做:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
CreateUninstallRegKey=NeedsUninstallRegKey

[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 NeedsUninstallRegKey: Boolean;
begin
  Result := CmdLineParamExists('-a');
end;

如果我想要一个变量而不是函数名呢?有了这个变量你就倒霉了。您只能为此使用函数。但是,您可以创建一个简单的getter函数,其中只返回某个变量的值。
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
CreateUninstallRegKey=NeedsUninstallRegKey

[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 NeedsUninstallRegKey: Boolean;
begin
  Result := CmdLineParamExists('-a');
end;