Контекст установки
ОС Windows позволяет установить приложение в двух вариантах: на одного пользователя либо на всех пользователей. Эта вариативность (контекст установки) чаще всего приводит к проблемам с приложением и неожиданному для пользователя поведению.
Установка одного приложения в двух разных контекстах воспринимается системой Windows как установка двух разных приложений.
Пример 1:
На компьютере уже установлен VK Teams 24.1 на одного пользователя.
Если запустить установку версии 24.3 на одного пользователя, то произойдет обновление приложения (то есть всё пройдет штатно).
Если запустить установку версии 24.3 на всех пользователей, то VK Teams версии 24.3 установится отдельно. В результате для текущего пользователя будут доступны две версии приложения.
Пример 2:
На компьютере уже установлен VK Teams 24.3 на одного пользователя.
Запуск установки версии 24.1 на одного пользователя завершится ошибкой (так и должно быть, так как даунгрейд версий продуктом не предусмотрен).
Если запустить установку версии 24.1 на всех пользователей, то выполнится новая (отдельная) установка VK Teams 24.1. Эта версия будет доступна всем пользователям компьютера, включая текущего.
Аналогично происходит и когда одна версия установлена на всех пользователей, а потом выполняется установка другой версии на одного пользователя. Таким образом, если пользователь столкнулся с тем, что у него установлены две версии VK Teams, то причина, скорее всего, в том, что были выполнены две установки в разных контекстах.
Контекст установки и MSI-пакет
MSI-пакет не умеет определять контекст предыдущей установки. Это означает, что при каждом обновлении с помощью MSI-пакета обязательно нужно задавать такой же параметр контекста установки, как у первой установки. Если не указывать параметр вообще, всегда будет выполняться установка на одного пользователя.
Запомнить!
При каждом обновлении с помощью MSI-пакета обязательно нужно задавать такой же параметр контекста установки, как у первой установки.
Контекст установки и EXE-установщик
EXE-установщик умеет определять «старое» приложение, установленное на всех пользователей. Если оно найдено, то автоматически выполняется обновление на всех пользователей.
Установка от имени администратора
Установка от имени администратора (правый клик мыши → контекстное меню → запуск от имени администратора) никак не связана с контекстом установки.
Если обычный пользователь запустит установку от имени администратора, сам не являясь таковым, то приложение установится на одного пользователя, но на учетную запись администратора. Автоматический запуск приложения после установки будет выполнен от имени администратора — именно в его домашнюю папку будет записан кэш приложения в случае авторизации и последующей работы.
Если пользователь откроет список Приложения и возможности, например чтобы удалить приложение, то приложение в списке не отобразится, так как в нём отображаются программы, установленные либо на всех пользователей, либо конкретно на этого пользователя.
Установка на всех пользователей и автоматическое обновление
Автоматическое обновление в MSI-пакете включается параметром AUTOUPDATES
. При установке на одного пользователя этого параметра достаточно. При установке на всех пользователей появляются дополнительные условия, так как такое обновление требует прав администратора: нужно менять файлы в системных папках и, возможно, менять значения в системном реестре. При этом приложение, запущенное пользователем, наследует права этого пользователя. У рядового пользователя, как правило, нет прав администратора, поэтому попытка автоматического обновления завершится неудачей.
По этой причине реализован следующий механизм: если приложение считает, что пользователь не имеет прав администратора, то:
- выключается механизм автоматического обновления;
- скрывается кнопка проверки обновлений.
Проверка пользователя выполняется следующим образом: приложение ищет пользователя в списке локальных администраторов компьютера. Если его там нет, значит у него нет прав администратора. Поэтому, например, доменные администраторы эту проверку не пройдут.
Если приложение перезапустить от имени администратора (либо в его сессии), то механизм автоматических обновлений включается, кнопка проверки обновлений становится доступна.
Установка на всех пользователей и автоматический запуск после установки
Установка на всех пользователей требует прав администратора. Это означает, что установка выполняется с его правами, и последующий автозапуск (если был включен) также выполнится с правами администратора. Если выполнен вход в учетную запись пользователя, и пользователь не является администратором, то сперва следует закрыть приложение, иначе кэш приложения после авторизации будет сохраняться в домашнюю папку администратора, а не пользователя.
Тихая установка на всех пользователей и UAC-окно
Если пользователь не является администратором, то при установке MSI-пакета через графический интерфейс появится UAC-окно для подтверждения прав администратора. Однако в случае тихой установки (/q
) подавляется абсолютно весь графический интерфейс, включая UAC-окно. Поэтому установка на всех пользователей, если запустил ее не администратор, завершится неудачей. Чтобы этого избежать, установку нужно выполнить из командной строки, открытой от имени администратора.
Примечание
EXE-установщик способен показывать UAC-окно даже в случае тихой установки.
Проброс настроек прокси
В приложении можно задавать настройки прокси. Заданные настройки будут храниться в файле на диске в зашифрованном виде. Ключ для шифрования уникален для каждого пользователя, поэтому файл с сохраненными настройками нельзя клонировать между машинами.
Настройки прокси можно задать при установке: параметр PROXY_INI задает путь до файла с настройками, которые пробросятся в приложение (см. раздел Формат файла для PROXY_INI). Механизм работает следующим образом:
- во время установки файл копируется в одну из папок пользователя;
- приложение при запуске ищет этот файл, и если находит, то применяет настройки из этого файла и сразу же удаляет его.
Зачем выполняется удаление файла: файл хранит данные в незашифрованном виде, и время его жизни должно быть минимизировано.
Внимание
В приложении прокси настраивается независимо для каждого пользователя. При установке на всех пользователей настройки применятся к первому пользователю, запустившему приложение после установки. По этой причине установку следует выполнять с выключенным автозапуском, иначе настройки прокси применятся на учетную запись администратора.
