В одной из записей блога мы выясняли, откуда берутся нежелательные программы. Оказалось, что разработчики по-всякому скрывают их в установщиках своих программ, стремясь извлечь из этого выгоду. Может быть, было бы проще обходиться вовсе без установщиков программ?
Эта запись пролежала в черновиках почти год, пока не появился повод вернуться к теме установщиков, который дала… Windows 8. И хотя сегодняшний рассказ напрямую не связан с одной особенностью новой ОС Microsoft, следующая статья будет целиком посвящена ей.
Давайте посмотрим на основные сценарии использования установщиков, чтобы разобраться, зачем они нужны.
[+] Сегодня в программе
- Проверка прав на установку программы
- Уменьшение размера установочного пакета
- Копирование файлов в указанную папку и создание ярлыков
- Интеграция сторонних программ
- Возможность удаления и восстановления установленной программы
- Удаление программ
- Восстановление программ
- Можно ли удалять файлы из папки Windows\Installer
- Устранение проблем с установкой и удалением программ, использующих установщик Windows
- Регистрация компонентов и создание записей в реестре
- Ассоциация с типами файлов и регистрация в программах по умолчанию
- Опрос и дискуссия
Проверка прав на установку программы
На этой теме я остановлюсь подробнее, поскольку она касается одного аспекта связи между контролем учетных записей и совместимостью программ, который я не затрагивал ранее.
В современных ОС Microsoft проверка прав на установку программы реализуется запросом контроля учетных записей. В установщик можно встроить манифест, который вызывает запрос UAC при запуске исполняемого файла или в процессе установки, если это необходимо.
<requestedExecutionLevel level="asInvoker|highestAvailable|requireAdministrator" uiAccess="true|false"/>
С помощью манифеста можно задать три типа поведения установщика:
- asInvoker запускает программу с теми правами, которые есть у пользователя на данный момент. Если вы работаете с правами администратора и включенным UAC, запуск произойдет с обычными правами. Когда контроль учетных записей выключен, программа запускается с полными правами.
- highestAvailable показывает запрос UAC администратору, а обычному пользователю – нет.
- requireAdministrator форсирует запрос контроля учетных записей, который требует прав администратора.
Например, браузер Opera сначала распаковывается во временную папку, откуда запускается установщик. Причем запрос UAC не отображается, ибо права администратора понадобятся только в том случае, когда вы устанавливаете браузер для всех пользователей.
Если выбрать установку в профиль или на USB-носитель, щит UAC немедленно исчезнет с кнопки.
Это хороший пример интеллектуального установщика, хотя не каждый ИТ-специалист разделит это мнение. Ведь такой подход развязывает руки пользователям, позволяя устанавливать программы в профиль. Поэтому для эффективного запрета администраторы должны использовать SRP или AppLocker.
Уровни совместимости программ
Перечисленные выше параметры манифеста связаны с уровнем совместимости программы. В свойствах любого исполняемого файла вы можете указать операционную систему, с которой программа совместима.
Эти параметры отражены в пользовательском разделе реестра (HKCU), но можно применить их для всех пользователей в разделе HKLM.
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] "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 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] "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. Прямая ссылка на пакет и зеркало у меня на сайте, потому что Microsoft прекратила поддержку Fix It в статьях базы знаний и потихоньку выпиливает пакеты из публичного доступа.
Ранее для этих целей применялась утилита Windows Installer CleanUp.
Когда-то Microsoft выпустила ее для устранения неполадок в установке Office, но с его новыми версиями утилита уже несовместима. Поэтому компания больше не распространяет и не поддерживает утилиту, выпустив взамен универсальный Fix it (для Office 2013+ есть отдельная версия).
Регистрация компонентов и создание записей в реестре
Любой серьезный программный пакет (например, Microsoft Office) обязательно потребует полных прав, чтобы зарегистрировать свои компоненты и библиотеки, а также создать записи в разделе реестра HKLM. Такие задачи, необходимые для нормальной работы программы, всегда отводится установщику.
Впрочем, не для всех программ такая необходимость является жизненно важной. Так, можно не устанавливать браузер Opera или Firefox, а скопировать файлы, распакованные после запуска установщика, в любую папку. После запуска браузера в папке %appdata% вашего профиля будет создана отдельная папка для хранения настроек и кэша. Одновременно в разделе реестра HKCU появятся записи, относящиеся к браузеру.
Таким образом, у вас получается «полупортативная» программа. Она работает без установки, но оставляет в системе много следов, которые можно замести лишь вручную.
Так или иначе, можно вынести ярлык на рабочий стол или панель задач, ассоциировать браузер с его типами файлов и нормально работать.
Ассоциация с типами файлов и регистрация в программах по умолчанию
Ассоциация типов файлов и протоколов с какой-либо программой (например, смена браузера по умолчанию), является пользовательской настройкой, т.е. она не требует прав администратора.
Существует несколько способов связать программу с ее типами файлов и протоколов, один из которых показан на рисунке выше. Я их буду очень подробно разбирать в следующей записи, потому что Windows 8 изменилась в этом аспекте!
Опрос и дискуссия
Как видите, на установщики программ возлагается множество задач – от примитивной распаковки файлов и создания ярлыков до управления состоянием программы и ее связи с типами файлов и протоколов.
Я уверен, что многие читатели моего блога активно пользуются портативными программами, что само по себе не является проблемой.
Однако к неординарной ситуации может привести пренебрежение установщиком программы в том случае, когда он необходим для ее корректной работы и настройки, а также для восстановления и удаления.
В дискуссии я бы хотел подвести вас к следующей записи, которая станет одной из самых больших в этом блоге. В частности, меня интересует, пользуетесь ли вы в своей основной системе портативными программами, которые ассоциируете с более чем одним типом файлов (например, браузером, текстовым редактором или проигрывателем медиа файлов).
В комментариях, пожалуйста, перечислите эти программы и объясните, почему вы пользуетесь портативными версиями вместо полноценных установщиков.
Результаты голосования утеряны в связи с прекращением работы веб-сервиса опросов.
Иван
Господа-моё почтение! Выскажу свое мнение в поддержку портабельного софта…Лично я рассматриваю Виндовс как некую «оболочку» для запуска и работы своих востребованных каждый день приложений. А это прежде всего Opera@USB 12.10, QIP 2012 build 8701 Portable, Thunderbird Portable 16.0.2, Portable Skype 6.0.0.126 Rus, WebCam Looker 6.0 Portable, Daemon_Tools_Lite_v4.41.3.0173_Portable, FormatFactory 3.0.1 Rus Portable и поверьте еще очень много программ которые хоть раз в несколько дней но приходиться запускать и с ними работать.Общее количество портабельного софта на компьютере составляет более 1200 штук…чего никогда не сможет быть с инсталляциями. Не все ,конечно, активно используются но факт имеет место быть. Из установочных программ приемлю только продукты Касперского и библиотеки dll. Преимущества неоспоримы-один раз установив и настроив под себя Систему, сделав загрузочным диском Акрониса образ этой Системы для возможной её реанимации в последующем мы получаем практически моментально восстанавливаемую и уже настроеную Виндовс с набором нужного вам программного обеспечения! Это ли не удобно для пользователя?! А асоциировать приходиться не так уж и много..в основном это файлы .fb2, pdf, .doc, .rar , .JPG. Ну это дело пары минут! Зато Виндовс летает, системный раздел не пухнет, реестр не засоряется так быстро, да и программы всегда на месте! Всем добра!
Vadim Sterkin
Иван, такой подход вполне имеет право на жизнь, при условии что:
1. Программа работает абсолютно корректно в портативном варианте. Насколько я помню, Daemon Tools нужен драйвер (кстати, с этим классом программ была масса проблем после выхода 7, а после 8 — не слышно).
С портативным Office люди постоянно приходят, причем с нормально установленным таких вопросов вообще не задают :)
2. Программой удобно пользоваться. В Windows 8 будет проблематично сопоставить портативную Оперу с протоколами. С другой стороны, есть контекстные меню — дополнительная точка входа в функции программы.
3. Программа регулярно обновляется, желательно в автоматическом режиме, иначе беда. У вас все портативные программы последних версий и как вы поддерживаете их актуальное состояние? 1200 штук, все-таки, не шутка.
Вы не поверите… © Можно устанавливать программы нормально и делать инкрементные копии, да хоть тем же Акронисом. И все будет акутально на момент последней копии. Дело ж не только в программах, но и в настроенной пользовательской среде — мы ж постоянно что-то в ней изменяем.
Я раньше делал как вы, но инкрементная копия уменьшает число телодвижений.
Сергей
Я так и не нашёл в статье ответа на вопрос, зачем же нужны установщики.
Можно ли хоть краткую информацию об этом?
С точки зрения пользователя я вижу только минусы.
Vadim Sterkin
Легко! Нажмите [+] рядом с «Сегодня в программе» в начале статьи и см. старшие уровни списка.
Думаю, это зависит от опыта пользователя :) Я вижу только плюсы (за исключением интеграции сторонних программ).
Сергей
Vadim Sterkin, спасибо за столь быстрый ответ! =)
Если я правильно понял, то Вы говорите про эту часть:
Если не сложно, то давайте по каждому пункту:
Если устанавливать не нужно, то и права на установку не нужны. Меньше разработки, меньше проблем пользователю.
Описано, какие бывают уровни совместимости, но польза от установки не очевидна.
То же и с портабельной версией, так что не понятно, зачем.
Создание ярлычка на рабочем столе — не плохо, пока первое преимущество.
Далее по пунктом так же сомнительно.
У меня задача чисто практическая — хочу у нас предложить отказаться от инсталлятора и хочу узнать у независимых источников, какие преимущества мы потеряем.
Vadim Sterkin
Сергей, ок, давайте по пунктам.
Разрабатывать ПО надо в соответствии с рекомендациями производителя ОС, а их игнорирование создает проблемы администраторам, и не только в организациях, кстати.
Эта информация дана для самообразования.
В статье же написано, зачем.
Угу, а ещё в меню Пуск — нажал Win, ввел пару букв и запустил.
Так вот дальше по пунктам самое главное :) Начиная от затруднений с развертыванием в организации, продолжая неконтролируемым состоянием приложений и заканчивая невозможностью ассоциировать их с файлами и протоколами в 8 и выше.
Через увлечение портативным софтом все проходят, и я сейчас не буду убеждать вас в том, что для программ (не утилит) лучше использовать установщик. Надеюсь, вы сами к этому выводу придете со временем — я пришел :)
P.S. Не заметил
У вас — это в организации что-ли? Эммм… даже не знаю, что сказать :)
Андрей
Несколько лет назад читал статью о переходе с одной версии MacOS на другую. Не берусь утверждать, что современные программы на MacOS ведут себя также, как portable-версии программ для Windows, но дело не в этом.
У человека на предыдущей версии Mac OS было «установлено» несколько десятков программ. Переход на следующую версию Mac OS был сделан с помощью следующих шагов:
1) Папки с программами скопированы на новое место (в какую именно папку — уже не помню, но в данном случае это не принципиально).
Все. Переустановка НЕСКОЛЬКИХ ДЕСЯТКОВ программ была сделана одним быстрым копированием, которое вряд ли заняло более десятка минут. И программы заработали на новом компьютере.
Представляю, сколько времени пришлось бы убить, если бы на подобное происходило платформе Windows с помощью инсталляции программ. Это ж еще дистрибутивы надо было бы отыскать, а несколько десятков дистрибутивов — весьма немало. За несколько лет они могли и потеряться, и находиться в другом шкафу/ у друзей / на работе / потеряться и т.д. — на полный переход ушло бы от пары дней до нескольких недель.
То есть, с помощью этого пример было воочию продемонстрировано огромное преимущество portable софта.
Виталий К. ©
Убогость макоси, которая не может обновится без переустановки программ?
Олег Мустафин
Здравствуйте, Вадим.
Благодаря серии ваших статей я сделал наконец-то ревизию своего системного раздела.
И таки мне удалось выявить одну странность, как мне кажется (или нет). А именно:
Был найден установщик размером 1.2 ГБ C:\Windows\Installer\2b81209.msi.
https://cloud.mail.ru/public/31LR/9FTWCTFaA
Здесь — порядок. Но!.. В моем профиле в папке Downloaded Installations был найден его точный дубликат C:\Users\Олег\AppData\Local\Downloaded Installations\{8BF0B73B-964E-43DB-91C6-BC006A760143}\Anatomy & Physiology.msi
https://cloud.mail.ru/public/N1hM/1pFh1iLPx
Так же в AppData в этой папке Downloaded Installations есть дубль еще одного установщика в 3 МБ. И все.
Опираясь на свои неполные понятия о системе, я не понимаю, зачем в AppData есть этот установщик? Как вы считаете, все же, имеет ли смысл этот установщик в AppData, или он «паразитный», как я предполагаю? И можно ли его удалить?
Vadim Sterkin
Олег, некоторые программы кэшируют свои установщики в ProgramData или AppData, о чем даже написано в статье.
Олег Мустафин
По-моему, речь шла лишь о «не профильной» папке ProgramData
Vadim Sterkin
Но вы же понимаете, что создатели приложения могут поместить свой MSI куда им вздумается?
Олег Мустафин
Ясно. Буду знать