Inno Setup Создание раздела реестра для вошедшего в систему пользователя (не администратора)

Я пытаюсь создать установщик, используя установку Inno, когда сталкиваюсь с этой проблемой, все остальное устанавливается, но ключи реестра не устанавливаются у текущего пользователя, я не могу найти его в HKEY_CURRENT_USER, Но когда я пытаюсь запустить Regedit от имени администратора, там устанавливается реестр. У меня включено UAC и выполняется проверка с учетной записью администратора для запуска установки, почему это происходит?

Вот мой Registry раздел

[Registry]
Root: HKCU; Subkey:Software; Flags: uninsdeletekey; ValueName:ABS; ValueType:string; ValueData:ABS;
Root: HKCU; Subkey:Software\Microsoft\Office\Word\Addins\ABS.ScriptManager; Flags: uninsdeletekey;
Root: HKCU; Subkey:Software\Microsoft\Office\Word\Addins\ABS.ScriptManager; ValueName:Description; ValueType:string; ValueData:Script Manager; Flags: uninsdeletekey;

Примечание: я использую 32-битную Windows 7

3 ответа

Я не думаю, что вы можете явно записать ключи реестра вошедшего в систему пользователя из Inno Setup. Вы можете записать в раздел реестра пользователя, который запускает только установщик.

Вы можете записать в любой (или все) ключи реестра пользователя через HKEY_USERS, но я не знаю, если вы можете сказать, какой пользователь вошел в систему.


Но вы можете запустить внешнее приложение, которое записывает раздел реестра как часть установки, используя runasoriginaluser флаг или ExecAsOriginalUser функция.

Вы можете использовать reg.exe за это:

[Run]
Filename: reg.exe; Parameters: "ADD HKCU\Software\MyProgram /v Foo /t REG_SZ /d Bar"; \
    Flags: runasoriginaluser runhidden

или же

procedure CurStepChanged(CurStep: TSetupStep);
var
  Params: string;
  ResultCode: Integer;
begin
  if CurStep = ssPostInstall then
  begin
    Log('Adding registry key for original user');
    Params := 'ADD HKCU\Software\xxxx /v Foo /t REG_SZ /d Bar';
    if ExecAsOriginalUser(
         'reg.exe', Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) and
       (ResultCode = 0) then
    begin
      Log('Added registry key for original user');
    end
      else
    begin
      Log('Error adding registry key for original user');
    end;
  end;
end;

Кредиты за идею: @Markus

В разделе [Выполнить] с: Имя файла: reg.exe; Параметры: "ИМПОРТ..." и флаг: runascurrentuser!

Из формулировки вашего вопроса это звучит так, потому что вы "проверяете учетную запись администратора для запуска установки". Если это так, и вы вводите другую учетную запись (из той, в которую вы вошли) в приглашении UAC, то текущий пользователь фактически становится учетной записью администратора, которую вы только что ввели в приглашении UAC, а не учетной записью, в которую вы вошли. в с. Что вам может понадобиться, это использовать runasoriginaluser функция, которая будет использовать учетные данные вошедшего в систему пользователя вместо учетной записи, которую вы указали в приглашении UAC.

Другие вопросы по тегам