Как использовать функцию кода для корневого параметра в записи раздела реестра?

Я хотел бы установить для ключа реестра значение 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. 

Любое предложение по этому поводу?


person Federico Bellucci    schedule 14.03.2013    source источник
comment
Учитывая, что PrivilegesRequired фиксируется во время компиляции, нет смысла пытаться заставить один установщик выполнять установку как для каждой машины, так и для каждого пользователя. Выберите один из них и бегите с ним.   -  person Miral    schedule 15.03.2013
comment
Какова ваша директива PrivilegesRequired? По умолчанию ваша установка никогда не будет запущена от имени пользователя без прав администратора, и если пользователь без прав администратора попытается запустить ее, ваши настройки будут сохранены для пользователя, до которого они повышают права.   -  person Deanna    schedule 15.03.2013


Ответы (1)


Я не думаю, что можно использовать функцию в качестве получателя значения параметра Root. Я бы обошел эту ситуацию, используя условие Check следующим образом:

[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;
person TLama    schedule 14.03.2013