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

Очень распространенный вопрос о создании (Inno Setup) установщиков вращается вокруг доступа / изменения профиля определенного пользователя (текущего пользователя, вошедшего в систему) из установщика, который работает с повышенными привилегиями / правами администратора.

Это имеет много недостатков и подвержено ошибкам.

Все существующие ответы охватывают часть проблемы (реестр, файлы, значок на рабочем столе и т. Д.). Цель этого вопроса - собрать ответы, которые решают проблему в глобальном масштабе, со всеми возможными подходами.

1 ответ

Решение

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

Все попытки достичь этого полагаются на такие хитрости, как:

Хотя они не являются надежными, по крайней мере по следующим причинам:

  • Если текущий пользователь не имеет прав администратора, ему необходимо ввести учетные данные администратора в приглашении UAC установщика. Это переключает установщик на другого пользователя. Так {user*} Константы не будут ссылаться на пользователя, который инициировал установку.

  • Когда пользователь явно запускает установщик с повышенными привилегиями, например, щелкнув установщик правой кнопкой мыши и выбрав "Запуск от имени администратора" или запустив его из другого приложения с повышенными правами (файловый менеджер), "первоначальный пользователь" для runasoriginaluser флаг или ExecAsOriginalUser функция уже будет повышена.

  • В корпоративных средах приложения устанавливаются администратором, который не является пользователем, который будет использовать приложение.


Единственное правильное общее решение этой проблемы - отложить настройку пользовательской среды только до фактического пользовательского сеанса.

Проще всего заставить приложение выполнить настройку при первом запуске.

Установщик может развертывать только общие файлы, которые приложение может использовать для установки.

Если вы не можете изменить приложение по какой-либо причине, вам придется выполнить итерацию всех учетных записей и изменить их:

Если вам необходимо убедиться, что настройки распространяются на учетные записи, созданные только после установки, см. Раздел Как установить файлы для каждого пользователя, включая будущих новых пользователей, в программе Inno Setup?


Если вас устраивает тот факт, что приложение будет настроено только для вошедшего в систему пользователя, используйте PrivilegesRequired=lowest:

[Setup]
PrivilegesRequired=lowest

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

Если вам все еще нужны права администратора для какой-либо подзадачи установки, вы можете запросить повышение привилегий только для этой подзадачи:

Если вы хотите, чтобы пользователь не нарушил это, явно запустив программу установки с правами администратора, см.

Или вы можете программно узнать, что, если учетная запись текущего сеанса входа в Windows:

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