Inno Setup Использование {localappdata} для вошедшего в систему пользователя

Я пытаюсь создать установщик, используя Inno Setup, когда сталкиваюсь с этой проблемой, все остальное устанавливается, но ключи реестра не устанавливаются у текущего пользователя. Я нашел эту полезную тему (большое спасибо!):
Inno Setup Создание раздела реестра для вошедшего в систему пользователя (не администратора)

Это решило часть для добавления ключей реестра, как это:

 [Run]
 Filename: reg.exe; \
   Parameters: "ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""{localappdata}\temp\\"""; \
   Flags: runasoriginaluser runhidden

Моя проблема:
{localappdata}относится к пользователю admin (admin), а не к локальному пользователю (тест):

Добавлено: HKCU \ Software \ myprinter OutputFile REG_SZ c: \ users \ admin \ appdata \ local \ temp \

Требуется: HKCU \ Software \ myprinter OutputFile REG_SZ c: \ users \ test \ appdata \ local \ temp \

Программное обеспечение не работает, потому что не разрешено использовать администраторский темп (конечно)

Хотя согласно онлайн-справке он должен работать для пользователя, запустившего установку, в моем случае, похоже, это не так. (с или без postinstall флаг)

runasoriginaluser

Действительно только в разделе [Выполнить]. Если этот флаг указан, а система работает под управлением Windows Vista или более поздней версии, то порожденный процесс будет выполняться с учетными данными пользователя (обычно без повышенных прав), который изначально запустил программу установки (т. Е. С учетными данными "pre-UAC dialog").

Это поведение по умолчанию, когда используется флаг postinstall.

Если пользователь запускает программу установки, щелкнув правой кнопкой мыши его EXE-файл и выбрав "Запуск от имени администратора", этот флаг, к сожалению, не будет действовать, поскольку программа установки не имеет возможности запускать какой-либо код с исходными учетными данными пользователя. То же самое верно, если программа установки запущена из процесса с повышенными правами. Обратите внимание, однако, что это не ограничение Inno Setup; В таких случаях установщики на основе установщика Windows не могут вернуться к исходным учетным данным пользователя.

Этот флаг нельзя сочетать с флагом runascurrentuser.

Примечание: запуск Inno Setup: 5.5.9 (a) и Windows 10

1 ответ

Решение

Во-первых, ваш подход не верен.

Там два правильных способа:

  1. Если установщик устанавливает приложение только для текущего (непривилегированного) пользователя, не требуйте прав администратора. использование PrivilegesRequired=lowest,

    PrivilegesRequired=lowest
    

    Тогда {localappdata} константа (и аналогичная) будет правильно ссылаться на папку текущего пользователя.

  2. Если установщик устанавливает приложение для всех пользователей, нет смысла обновлять реестр одного конкретного пользователя. Всем пользователям нужны настройки реестра, а не только один. В этом случае рекомендуется установить общие параметры реестра в HKLM (или сохраните настройки в какой-нибудь общий файл). И пусть приложение скопирует настройки в куст реестра пользователей при первом запуске.

    См. Также Как записать в каталог "Мои документы" пользователя с помощью установщика, когда пользователь использовал "Запуск от имени администратора".

Вы также можете позволить пользователю выбирать между этими двумя подходами.
См. Повышение привилегий запроса установщика Inno Setup только при необходимости.

По аналогичным вопросам смотрите


Во всяком случае, {localappdata} константа разрешается процессом установки Inno, работающим в контексте учетной записи администратора. И решение никоим образом не зависит от runasoriginaluser флаг.

Но вы можете использовать эквивалент %LOCALAPPDATA% Переменная окружения, которая будет разрешена исполняемым процессом, то есть в контексте "оригинального пользователя".

Чтобы разрешить разрешение переменных среды, вам нужно выполнить команду через cmd.exe,

[Run]
Filename: {cmd}; \
    Parameters: "/C reg.exe ADD ""HKCU\Software\myprinter"" /v OutputFile /t REG_SZ /d ""%LOCALAPPDATA%\temp\\"""; \
    Flags: runasoriginaluser runhidden

Другой подход см. В разделе " Настройка Inno" - доступ к непривилегированным папкам учетных записей из программы установки, для которой требуются привилегии.

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