Зачем программам нужны установщики

Оказалось, что разработчики по-всякому скрывают их в установщиках своих программ, стремясь извлечь из этого выгоду. Может быть, было бы проще обходиться вовсе без установщиков программ?

Эта запись пролежала в черновиках почти год, пока не появился повод вернуться к теме установщиков, который дала… Windows 8. И хотя сегодняшний рассказ напрямую не связан с одной особенностью новой ОС Microsoft, следующая статья будет целиком посвящена ей.

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

Сегодня в программе

Проверка прав на установку программы

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

В современных ОС Microsoft проверка прав на установку программы реализуется запросом контроля учетных записей. В установщик можно встроить манифест , который вызывает запрос UAC при запуске исполняемого файла или в процессе установки, если это необходимо.

С помощью манифеста можно задать три типа поведения установщика:

  • asInvoker запускает программу с теми правами, которые есть у пользователя на данный момент. Если вы работаете с правами администратора и включенным UAC, запуск произойдет с обычными правами. Когда контроль учетных записей выключен, программа запускается с полными правами.
  • highestAvailable показывает запрос UAC администратору, а обычному пользователю – нет.
  • requireAdministrator форсирует запрос контроля учетных записей, который требует прав администратора.

Например, браузер Opera сначала распаковывается во временную папку, откуда запускается установщик. Причем запрос UAC не отображается, ибо права администратора понадобятся только в том случае, когда вы устанавливаете браузер для всех пользователей.

Если выбрать установку в профиль или на USB-носитель, щит UAC немедленно исчезнет с кнопки.

Это хороший пример интеллектуального установщика, хотя не каждый ИТ-специалист разделит это мнение. Ведь такой подход развязывает руки пользователям, позволяя устанавливать программы в профиль. Поэтому для эффективного запрета администраторы должны использовать SRP или AppLocker .

Уровни совместимости программ

Перечисленные выше параметры манифеста связаны с уровнем совместимости программы. В свойствах любого исполняемого файла вы можете указать операционную систему, с которой программа совместима.

Эти параметры отражены в пользовательском разделе реестра (HKCU), но можно применить их для всех пользователей в разделе HKLM.

Windows Registry Editor Version 5.00 "C:\\Program Files (x86)\\PortableSoft\\BK ReplaceEm\\replacem.exe"="WINXPSP3"

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

  • RunAsInvoker — текущие права
  • RunAsHighest — максимально доступные пользователю права
  • RunAsAdmin — обязательные права администратора

Кстати, режим совместимости с XP требует полных прав.

Эксперимент с правами на запуск программы

В редактор реестра (regedit.exe) заложен запуск с максимально доступными правами (RunAsHighest). На практике это означает, что:

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

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

Эксперимент имеет смысл только в том случае, если у вас включен контроль учетных записей.

Войдите в систему с правами администратора, откройте командную строку с обычными правами и запустите редактор реестра:

Start regedit

Как обычно, вы увидите запрос контроля учетных записей. Теперь выполните:

Set __COMPAT_LAYER=RunAsInvoker start regedit /m

Первая команда задает переменную, которая определяет уровень совместимости для всех программ, запущенных в этой сессии консоли, а вторая запускает еще один экземпляр редактора реестра (ключ /m ). В результате он откроется с обычными правами.

В Process Explorer хорошо видно, что у первого экземпляра (PID 3880) высокий уровень целостности , а у второго (PID 7480) – средний уровень, соответствующий обычным правам. С такими правами вы не сможете внести изменения в HKCR и HKLM, в чем я предлагаю вам убедиться самостоятельно.

Таким образом, можно всегда запускать regedit с обычными правами даже под администратором, если пользоваться вышеприведенным командным файлом или указать в реестре тип запуска RunAsInvoker.

Windows Registry Editor Version 5.00 "C:\\Windows\regedit.exe"="RunAsInvoker"

Однако давайте вернемся к установщикам.

Уменьшение размера установочного пакета

Выше вы видели, что установщик Opera сначала извлекается во временную папку из самораспаковывающегося архива в формате 7-zip. Сочетание хорошего уровня сжатия и открытой лицензии позволяет разработчикам уменьшить размер пакета и сэкономить на трафике. Неудивительно, что точно такую же стратегию применяют в Mozilla, упаковывая в 7-zip свои программные продукты.

Другие компании могут использовать альтернативные средства сжатия файлов. Microsoft, как правило, использует формат CAB.

Копирование файлов в указанную папку и создание ярлыков

Во время установки вы можете указать, в какую папку будет установлена программа. Эта процедура примитивна, и с ней легко справится большинство пользователей даже без установщика. То же самое можно сказать и о создании ярлыков.

Таким образом, эти функции служат для нашего удобства и экономии времени.

Интеграция сторонних программ

Как мы выяснили еще год назад, эта тенденция набрала огромную популярность. Возвращаясь к примеру с AIMP и Яндекс.Бар , можно рассмотреть два варианта интеграции.

Раньше Яндекс поставлял свою панель для браузеров в виде пакета MSI, который разработчик встраивал в установщик своей программы. Пакет обладал особыми свойствами установщика Windows , позволяющими гибко настроить установку.

Msiexec /i YandexPackSetup.msi YAHOMEPAGE="y" YAQSEARCH="y" VENDORSPECIFIC="some text" /qb

Теперь установка стала более интеллектуальной за счет того, что панель загружается с серверов Яндекса только в том случае, если при установке отмечен соответствующий ей флажок.

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

Возможность удаления и восстановления установленной программы

Затронув тему MSI, я хочу остановиться подробнее на самом популярном типе установщика для средних и крупных программ.

Удаление программ

Давайте посмотрим, как происходит процесс удаления программы, поставляемой в пакете MSI. Кстати, он может скрываться в любой красивой оболочке установщика, например, InstallShield .

Пакет кэшируется в базе данных установщика Windows — папке %SystemRoot%\Installer, где свет на невнятные имена файлов можно пролить, добавив столбец «Тема».

Когда вы удаляете программу из панели управления, система находит команду для удаления в разделе реестра

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Здесь каждой программе соответствует свой подраздел. Параметр UninstallString содержит команду для установщика Windows, указывающую на идентификатор пакета (GUID). Поиск пакета производится в папке %SystemRoot%\Installer по свойству «Редакция».

При использовании других установщиков этот параметр может содержать, например, путь к файлу uninstall.exe, содержащему инструкции для удаления.

Восстановление программ

Восстановление пакетов MSI проходит аналогично установке, однако разница в том, что для этого понадобится исходный пакет установщика, указанный в параметре InstallSource . На рисунке выше не очень хорошо видно, но мой путь указывает на временную папку в кэше IE9 (я запускал установку, не сохраняя файл). Поскольку папка уже очищалась, восстановление не сработает.

Чтобы обеспечить полноценное восстановление (равно как и изменение набора компонентов), программы могут кэшировать свои исходные установочные файлы. Иногда для этого используется папка ProgramData , а Microsoft Office создает скрытую папку MSOCACHE в корне диска.

Можно ли удалять файлы из папки Windows\Installer

Если вы относительно давно работаете в текущей системе и устанавливаете разнообразные программы, размер скрытой системной папки %SystemRoot%\Installer может измеряться в гигабайтах. Неудивительно, что люди с маленьким системным разделом задаются вопросом о том, можно ли удалять файлы из нее.

Короткий и простой ответ – нет, удалять файлы из этой папки нельзя.

На практике удаление пакета приведет к тому, что система будет владеть неверной информацией об установленной программе. Как следствие:

  • Перестанет работать восстановление . Выше вы видели, что установщик Windows полагается на кэшированный пакет MSI для этой операции, и без него ничего не восстановит.
  • Могут возникнуть проблемы с удалением программы . Если она начнет работать некорректно, вам совершенно точно придется заново скачать дистрибутив программы и переустановить ее. Однако записи в реестре могут препятствовать этому, поскольку Windows считает программу установленной.

Но иногда понимание этого приходит уже постфактум, хотя и в таком случае еще не все потеряно.

Устранение проблем с установкой и удалением программ, использующих установщик Windows

В принципе, можно попытаться удалить записи в реестре вручную, но лучше воспользоваться специальным диагностическим пакетом Fix it . Он призван исправлять проблемы с установкой и удалением программ, использующих установщик Windows (картинка является прямой ссылкой на пакет).

Если проблему не удается решить, можно поискать в каталогах ПО утилиту Windows Installer CleanUp.

Когда-то Microsoft выпустила ее для устранения неполадок в установке Office, но с его новыми версиями утилита уже несовместима. Поэтому компания больше не распространяет и не поддерживает утилиту , выпустив взамен универсальный Fix it (для Office 2013+ есть отдельная версия).

Регистрация компонентов и создание записей в реестре

Любой серьезный программный пакет (например, Microsoft Office) обязательно потребует полных прав, чтобы зарегистрировать свои компоненты и библиотеки, а также создать записи в разделе реестра HKLM. Такие задачи, необходимые для нормальной работы программы, всегда отводится установщику.

Впрочем, не для всех программ такая необходимость является жизненно важной. Так, можно не устанавливать браузер Opera или Firefox, а скопировать файлы, распакованные после запуска установщика, в любую папку. После запуска браузера в папке %appdata% вашего профиля будет создана отдельная папка для хранения настроек и кэша. Одновременно в разделе реестра HKCU появятся записи, относящиеся к браузеру.

Таким образом, у вас получается «полупортативная» программа. Она работает без установки, но оставляет в системе много следов, которые можно замести лишь вручную.

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

Ассоциация с типами файлов и регистрация в программах по умолчанию

Ассоциация типов файлов и протоколов с какой-либо программой (например, смена браузера по умолчанию), является пользовательской настройкой, т.е. она не требует прав администратора.

Существует несколько способов связать программу с ее типами файлов и протоколов, один из которых показан на рисунке выше. Я их буду очень подробно разбирать в следующей записи , потому что Windows 8 изменилась в этом аспекте!

Опрос и дискуссия

Как видите, на установщики программ возлагается множество задач – от примитивной распаковки файлов и создания ярлыков до управления состоянием программы и ее связи с типами файлов и протоколов.

Я уверен, что многие читатели моего блога активно пользуются портативными программами, что само по себе не является проблемой.

Однако к неординарной ситуации может привести пренебрежение установщиком программы в том случае, когда он необходим для ее корректной работы и настройки, а также для восстановления и удаления.

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

В комментариях, пожалуйста, перечислите эти программы и объясните, почему вы пользуетесь портативными версиями вместо полноценных установщиков .

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