Inno setup 如何在注册表段条目中使用根参数的代码函数?

Inno setup 如何在注册表段条目中使用根参数的代码函数?,inno-setup,Inno Setup,如果用户是管理员,我想将注册表项设置为HKLM;如果用户是普通用户,我想将注册表项设置为HKCU 我试过这个: [Registry] Root: "{code:DefRegRoot}"; Subkey: "Software\MyCompany\MySW\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}" [Code] function IsRegularUser(): Boolean; begin

如果用户是管理员,我想将注册表项设置为
HKLM
;如果用户是普通用户,我想将注册表项设置为
HKCU

我试过这个:

[Registry]
Root: "{code:DefRegRoot}"; Subkey: "Software\MyCompany\MySW\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"

[Code]
function IsRegularUser(): Boolean;
begin
  Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn);
end;

function DefRegRoot(Param: String): String;
begin
  if IsRegularUser then
    Result := HKCU
  else
    Result := HKLM;
end;
但是编译器在第一个注册表行返回一个错误:

Parameter "Root" is not a valid value. 

对此有什么建议吗?

我认为不可能将函数用作参数值获取程序。我会使用如下条件来解决这种情况:

[Registry]
Root: HKCU; Subkey: "Software\MyCompany\MySW\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Check: IsRegularUser 
Root: HKLM; Subkey: "Software\MyCompany\MySW\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Check: not IsRegularUser

[Code]
function IsRegularUser: Boolean;
begin
  Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn);
end;

考虑到
PrivilegesRequired
在编译时是固定的,因此尝试让单个安装程序同时执行每台机器和每用户的安装是没有意义的。自己选择一个并运行。您的
PrivilegesRequired
指令设置为什么?默认情况下,您的安装程序永远不会以非管理员用户的身份运行,如果非管理员用户尝试运行它,则您的设置将为他们提升到的用户保存。