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

Бих искал да задам ключ на системния регистър на 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