LaPorta USB

Раскатка на парк

Политика на сетевом ресурсе

Путь к файлу политики передаётся установщику через параметр POLICYPATH. Умолчания у него нет: без параметра первая установка не проходит, а смена версии берёт путь, записанный прежней установкой. Для парка машин путь ведёт на сетевой ресурс, доступный компьютерам домена на чтение, например \\fileserver\laportausb$\policy.json: правка одного файла на шаре применяется ко всем машинам без переустановки пакета. Ровно \\server\laportausb$\policy.json для настоящей шары не годится – это заглушка, которую служба читает как «путь не задан» и по которой в сеть не ходит.

Пакет и файл преобразования

  1. Положить LaPortaUsb.msi на шару, доступную компьютерам домена на чтение.
  2. Создать файл преобразования (.mst) с нужным значением POLICYPATH – в тихой установке через групповую политику параметры иначе не передать.

Значение POLICYPATH из файла преобразования, как и при обычной установке, попадает в реестр (HKLM\SOFTWARE\LaPortaUsb\PolicyPath) и там авторитетно: при раскатке доменной политикой авторитетен параметр установки, а не файл appsettings.json, поставленный рядом с программой. Обновление без параметра оставляет записанный путь как есть, переданный явно – заменяет его.

Назначение на подразделение

Назначить пакет на подразделение: «Конфигурация компьютера» → «Установка программ». Именно на компьютер, а не на пользователя: служба ставится машинно.

Смена версии

Новая версия ставится тем же пакетом с тем же кодом обновления (UpgradeCode) и увеличенной версией. Отдельно удалять прежнюю версию не нужно: Windows Installer снимает её и ставит новую в рамках одной операции.

Чего делать нельзя – подменять файлы в каталоге программы мимо установщика. Причина в учёте отключённых узлов: он живёт в %ProgramData%\LaPorta USB\disabled-nodes.json и хранит вместе с узлом класс носителя. Формат прежних версий новая служба читает, обратно – нет. Подмена файлов на прежнюю версию оставит машину с записями, которых та не понимает: отключённые узлы останутся отключёнными, а служба о них не узнает, и включать их придётся руками через диспетчер устройств.

Удаление силами установщика этой сложности не создаёт – и то, которое выполняется внутри обновления, и запущенное отдельно: оно останавливает службу, та снимает все отключения и очищает учёт, и следующая версия начинает с чистого листа.

Обновление той же версией разрешено явно (AllowSameVersionUpgrades в Package.wxs): установка новой сборки поверх прежней удаляет её и ставит новую. Без этого Windows Installer одинаковые версии за обновление не считает – установка завершается успехом и не делает ничего, а при некоторых сочетаниях в списке установленных программ появляется вторая копия. Найдено на приёмке.

В объекте групповой политики новый пакет назначается обновлением прежнего: в свойствах нового пакета на вкладке «Обновления» указать прежний и выбрать «Пакет может обновлять существующий пакет». Вариант «Удалить существующий пакет, затем установить обновляющий пакет» не годится. Удаление идёт отдельной операцией и уносит записанный путь к политике, а новый пакет ставится как первая установка. Без файла преобразования с POLICYPATH она отказывает, и на подразделении не остаётся программы вовсе.

Файл преобразования нужен и новому пакету: по нему ставятся машины, которые приходят в подразделение после смены версии. Приложить его можно только при создании назначения, методом «Особый». Файл, сделанный для прежней версии, к новой может не подойти: код продукта у каждой сборки свой. Надёжнее делать .mst заново для каждого выпуска.

Обновления на парке

Служба на каждой машине раз в сутки спрашивает сайт программы, не вышла ли версия новее, и пишет в журнал событие update_available. Выгруженные журналы отвечают на вопрос, какие машины отстали: событие приезжает на шару вместе с остальными записями.

Ставить обновление кнопкой из окна администратора на парке не нужно – версия на парке меняется групповой политикой, как описано выше. Кнопка рассчитана на отдельную машину.

Если парку нельзя обращаться наружу, проверка выключается двумя способами. Правкой политики (check_updates: false) – одной строкой на весь парк, но кнопка в окне при этом работать продолжает. Параметром установки UPDATECHECK=0 в файле преобразования – машинно, и правкой политики этот запрет не снять.

Прокси служба берёт машинный: настройку WinHTTP, которая раскатывается групповой политикой или командой netsh winhttp set proxy. Пользовательские настройки браузера службе не видны. Подробнее – в install.md.

Если версию на парке меняют не групповой политикой, а силами самих машин, в политике задаётся поле install_updates с ночными часами: служба скачает пакет и поставит его сама, без администратора за машиной. Групповая политика для парка всё же надёжнее – она ставит версию тогда, когда решил администратор, а не когда каждая машина дошла до своего окна.

Чек-лист перед раскаткой

Из раздела 8 спеки. Выполняется до установки на вторую машину.

  1. Проверить модуль «Контроль устройств» в Kaspersky Endpoint Security. Если он включён для USB-накопителей – либо отключить его для них, либо отказаться от установки программы. Два независимых блокировщика на одной шине дают невоспроизводимое поведение: какой из них сработает первым, предсказать нельзя.
  2. Внести папку установки и оба исполняемых файла в доверенную зону KES. Иначе самозащита или контроль активности приложений может помешать отключению устройства, и запрет будет срываться без внятной причины.
  3. Прогнать полный цикл на одной машине: запрет, только чтение, разрешение, перезагрузка, работа токена, вход по токену.