Установка приложения для текущего пользователя, вошедшего в систему, из программы установки Inno Setup, работающей от имени администратора
Очень распространенный вопрос о создании (Inno Setup) установщиков вращается вокруг доступа / изменения профиля определенного пользователя (текущего пользователя, вошедшего в систему) из установщика, который работает с повышенными привилегиями / правами администратора.
Это имеет много недостатков и подвержено ошибкам.
Все существующие ответы охватывают часть проблемы (реестр, файлы, значок на рабочем столе и т. Д.). Цель этого вопроса - собрать ответы, которые решают проблему в глобальном масштабе, со всеми возможными подходами.
1 ответ
Inno Setup не имеет встроенного механизма для доступа или изменения пользовательской среды из установщика, работающего с повышенными привилегиями / правами администратора.
Все попытки достичь этого полагаются на такие хитрости, как:
runasoriginaluser
флаг илиExecAsOriginalUser
функция Некоторые примеры:Изменение или доступ к реестру вошедшего в систему пользователя:
Inno Setup Создание раздела реестра для вошедшего в систему пользователя (не администратора) или
Как прочитать реестр HKCU для вошедшего в систему пользователя из программы установки Inno Setup, работающей от имени администратораДоступ к
AppData
папка вошедшего в систему пользователя:
Inno Setup всегда устанавливается в папку администратора AppData или
Inno Setup Используя {localappdata} для вошедшего в систему пользователя или
Inno Setup - помещает пользовательские файлы в административные документы.или используя
{user*}
постоянные
Хотя они не являются надежными, по крайней мере по следующим причинам:
Если текущий пользователь не имеет прав администратора, ему необходимо ввести учетные данные администратора в приглашении UAC установщика. Это переключает установщик на другого пользователя. Так
{user*}
Константы не будут ссылаться на пользователя, который инициировал установку.Когда пользователь явно запускает установщик с повышенными привилегиями, например, щелкнув установщик правой кнопкой мыши и выбрав "Запуск от имени администратора" или запустив его из другого приложения с повышенными правами (файловый менеджер), "первоначальный пользователь" для
runasoriginaluser
флаг илиExecAsOriginalUser
функция уже будет повышена.В корпоративных средах приложения устанавливаются администратором, который не является пользователем, который будет использовать приложение.
Единственное правильное общее решение этой проблемы - отложить настройку пользовательской среды только до фактического пользовательского сеанса.
Проще всего заставить приложение выполнить настройку при первом запуске.
Установщик может развертывать только общие файлы, которые приложение может использовать для установки.
Если вы не можете изменить приложение по какой-либо причине, вам придется выполнить итерацию всех учетных записей и изменить их:
- для файлов: Inno Setup Создание индивидуальных ярлыков на всех рабочих столах всех пользователей
- для реестра: удалить автоматически запускаемые записи реестра для всех пользователей
Если вам необходимо убедиться, что настройки распространяются на учетные записи, созданные только после установки, см. Раздел Как установить файлы для каждого пользователя, включая будущих новых пользователей, в программе Inno Setup?
Если вас устраивает тот факт, что приложение будет настроено только для вошедшего в систему пользователя, используйте PrivilegesRequired=lowest
:
[Setup]
PrivilegesRequired=lowest
Тогда {user*}
константы будут правильно ссылаться на папку текущего пользователя.
Если вам все еще нужны права администратора для какой-либо подзадачи установки, вы можете запросить повышение привилегий только для этой подзадачи:
- Inno Setup - регистрация компонентов в качестве администратора
- Inno Setup - Доступ к непривилегированным папкам учетной записи из установщика, который требует привилегий
Если вы хотите, чтобы пользователь не нарушил это, явно запустив программу установки с правами администратора, см.
- Не удается получить Inno Setup после установки Запустить элемент в runasoriginaluser или
- мой ответ на Как записать в каталог Мои документы пользователя с установщиком, когда пользователь использовал "Запуск от имени администратора".
Или вы можете программно узнать, что, если учетная запись текущего сеанса входа в Windows: