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.