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 ответ
Во-первых, ваш подход не верен.
Там два правильных способа:
Если установщик устанавливает приложение только для текущего (непривилегированного) пользователя, не требуйте прав администратора. использование
PrivilegesRequired=lowest
,PrivilegesRequired=lowest
Тогда
{localappdata}
константа (и аналогичная) будет правильно ссылаться на папку текущего пользователя.Если установщик устанавливает приложение для всех пользователей, нет смысла обновлять реестр одного конкретного пользователя. Всем пользователям нужны настройки реестра, а не только один. В этом случае рекомендуется установить общие параметры реестра в
HKLM
(или сохраните настройки в какой-нибудь общий файл). И пусть приложение скопирует настройки в куст реестра пользователей при первом запуске.
Вы также можете позволить пользователю выбирать между этими двумя подходами.
См. Повышение привилегий запроса установщика Inno Setup только при необходимости.
По аналогичным вопросам смотрите
- Inno Setup - помещает пользовательские файлы в административные документы
- Inno Setup всегда устанавливается в папку администратора AppData
Во всяком случае, {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" - доступ к непривилегированным папкам учетных записей из программы установки, для которой требуются привилегии.